Issue 166341
Summary [lldb] Duplicate frame recognisers when re-running target
Labels new issue
Assignees
Reporter Michael137
    Split out from: https://github.com/llvm/llvm-project/pull/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 https://github.com/llvm/llvm-project/pull/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.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to