Skip to content

[lldb] Duplicate frame recognisers when re-running target #166341

@Michael137

Description

@Michael137

Split out from: #166157

Reproducer:

$ lldb a.out -o "b main" -o run
(lldb) frame recognizer list
9: ObjC Exception Throw StackFrame Recognizer, module libobjc.A.dylib, demangled symbol objc_exception_throw
8: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex \.body\(content: SwiftUI\._ViewModifier_Content
7: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex body\.getter
6: Swift hidden frame recognizer, mangled symbol regex ^\$s.*
5: Swift runtime instrumentation frame recognizer, demangled (no args) symbol regex _swift_runtime_on_report
4: Swift runtime failure frame recognizer, demangled (no args) symbol regex Swift runtime failure
3: libc++ frame recognizer, demangled (no args) symbol regex ^std::__[^:]*::
2: abort_with_payload StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __abort_with_payload
1: Verbose Trap StackFrame Recognizer, demangled symbol regex ^(__clang_trap_msg|Bounds check failed|Pointer Check runtime failure)
0: Assert StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __pthread_kill

(lldb) run
(lldb) frame recognizer list                                                                                                        
19: ObjC Exception Throw StackFrame Recognizer, module libobjc.A.dylib, demangled symbol objc_exception_throw
18: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex \.body\(content: SwiftUI\._ViewModifier_Content
17: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex body\.getter
16: Swift hidden frame recognizer, mangled symbol regex ^\$s.*
15: Swift runtime instrumentation frame recognizer, demangled (no args) symbol regex _swift_runtime_on_report
14: Swift runtime failure frame recognizer, demangled (no args) symbol regex Swift runtime failure
13: libc++ frame recognizer, demangled (no args) symbol regex ^std::__[^:]*::
12: abort_with_payload StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __abort_with_payload
11: Verbose Trap StackFrame Recognizer, demangled symbol regex ^(__clang_trap_msg|Bounds check failed|Pointer Check runtime failure)
10: Assert StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __pthread_kill
9: ObjC Exception Throw StackFrame Recognizer, module libobjc.A.dylib, demangled symbol objc_exception_throw
8: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex \.body\(content: SwiftUI\._ViewModifier_Content
7: SwiftUI Changed Properties StackFrame Recognizer, demangled symbol regex body\.getter
6: Swift hidden frame recognizer, mangled symbol regex ^\$s.*
5: Swift runtime instrumentation frame recognizer, demangled (no args) symbol regex _swift_runtime_on_report
4: Swift runtime failure frame recognizer, demangled (no args) symbol regex Swift runtime failure
3: libc++ frame recognizer, demangled (no args) symbol regex ^std::__[^:]*::
2: abort_with_payload StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __abort_with_payload
1: Verbose Trap StackFrame Recognizer, demangled symbol regex ^(__clang_trap_msg|Bounds check failed|Pointer Check runtime failure)
0: Assert StackFrame Recognizer, module libsystem_kernel.dylib, demangled symbol __pthread_kill

Observe that on every re-run in the same LLDB session we'll re-register (but not clear the previous) frame recognizers.

It would be good to have a mechanism for not allowing to add duplicate recognizers. Ideally we would turn the deque of recognizers into something like a UniqueVector. That would help with the goal mentioned in #166157 where we want a common CLanguageRuntime plugin that registers some of the frame recognisers common to all the C-language runtime plugins. But we want to make sure the recognizers only get registered once, and not for every runtime that derives from the CLanguageRuntime. UniqueVector isn't quite the right fit because it doesn't allow removal of elements.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions