Skip to content

Commit

Permalink
[Examples] Add in_call_stack breakpoint function.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
JDevlieghere committed Nov 22, 2019
1 parent 6551ac7 commit 1b099c1
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions 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

0 comments on commit 1b099c1

Please sign in to comment.