summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-11-22 15:32:43 -0800
committerJonas Devlieghere <jonas@devlieghere.com>2019-11-22 15:36:42 -0800
commit1b099c1df00e3c8a0ba20af199c89a154bdb7a45 (patch)
treecefc7b1a17210979c72b74cbfa168fe0f6ba324a
parent6551ac7489fe070a2edcfac88f68c93321cba9a9 (diff)
downloadbcm5719-llvm-1b099c1df00e3c8a0ba20af199c89a154bdb7a45.tar.gz
bcm5719-llvm-1b099c1df00e3c8a0ba20af199c89a154bdb7a45.zip
[Examples] Add in_call_stack breakpoint function.
The in_call_stack Python script makes it possible to modify the last breakpoint to only stop if a given function is present in the call stack. It will check both the symbol name and the function name (coming from the debug info, in case the binary is stripped). To use this, you have to: 1. Import the script into lldb. (lldb) command script import in_call_stack.py 2. Set a breakpoint and use the in_call_stack alias. (lldb) b foo (lldb) in_call_stack bar Note that this alias operates on the last set breakpoint. You can re-run the in_call_stack command to modify the condition.
-rwxr-xr-xlldb/examples/python/in_call_stack.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/lldb/examples/python/in_call_stack.py b/lldb/examples/python/in_call_stack.py
new file mode 100755
index 00000000000..ba3ca57267f
--- /dev/null
+++ b/lldb/examples/python/in_call_stack.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+
+def __lldb_init_module(debugger, internal_dict):
+ debugger.HandleCommand(
+ 'command alias in_call_stack breakpoint command add --python-function in_call_stack.in_call_stack -k name -v %1'
+ )
+
+
+def in_call_stack(frame, bp_loc, arg_dict, _):
+ """Only break if the given name is in the current call stack."""
+ thread = frame.GetThread()
+ found = False
+ for frame in thread.frames:
+ name = arg_dict.GetValueForKey('name').GetStringValue(1000)
+ # Check the symbol.
+ symbol = frame.GetSymbol()
+ if symbol and name in frame.GetSymbol().GetName():
+ return True
+ # Check the function.
+ function = frame.GetFunction()
+ if function and name in function.GetName():
+ return True
+ return False
OpenPOWER on IntegriCloud