LLDB:Python API StepInstruction - 没有步进两次
LLDB: Python API StepInstruction - not stepping twice
我通过执行以下操作来定义断点:
breakpoint = target.BreakpointCreateByAddress(loadAddr)
breakpoint.SetScriptCallbackFunction( "mylldbmodule.bp_hit" )
我的 bp_hit 函数定义为:
def bp_hit(frame, *args):
thread = frame.GetThread()
process = thread.GetProcess()
#
# some work done here
#
#thread.StepInstruction( True )
#thread.StepInstruction( True )
#
# some more work done here
#
当我遇到断点时,我可以看到我的电脑在 loadAddr。如果我执行了其中一个 StepInstruction 调用,当我查看它时,我的电脑是 loadAddr + 4。但是,如果两个 StepInstructions 都执行了,我的电脑在查看时仍然是 loadAddr + 4。
出于某种原因,第二个(甚至第三个)StepInstruction 对 pc 没有影响。
为什么?我可以做些什么来让这项工作按预期进行吗?
谢谢。
lldb 在任何命令重新启动调试对象后的断点处停止命令的执行。这样做有点棘手,因为您可能会在重新启动调试器的命令中间遇到断点,然后我们必须重新进入命令解释器 - 而在断点命令的中间。
在 lldb 可以稳健地处理这个问题之前需要更多的清理工作,所以我们暂时不允许它。
根据您尝试执行的操作,您可能能够反转问题并从 Python 驱动整个调试会话。如果这似乎是一件有用的事情,这里有一个示例可能会让您入门:
http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/process_events.py
我通过执行以下操作来定义断点:
breakpoint = target.BreakpointCreateByAddress(loadAddr)
breakpoint.SetScriptCallbackFunction( "mylldbmodule.bp_hit" )
我的 bp_hit 函数定义为:
def bp_hit(frame, *args):
thread = frame.GetThread()
process = thread.GetProcess()
#
# some work done here
#
#thread.StepInstruction( True )
#thread.StepInstruction( True )
#
# some more work done here
#
当我遇到断点时,我可以看到我的电脑在 loadAddr。如果我执行了其中一个 StepInstruction 调用,当我查看它时,我的电脑是 loadAddr + 4。但是,如果两个 StepInstructions 都执行了,我的电脑在查看时仍然是 loadAddr + 4。
出于某种原因,第二个(甚至第三个)StepInstruction 对 pc 没有影响。
为什么?我可以做些什么来让这项工作按预期进行吗?
谢谢。
lldb 在任何命令重新启动调试对象后的断点处停止命令的执行。这样做有点棘手,因为您可能会在重新启动调试器的命令中间遇到断点,然后我们必须重新进入命令解释器 - 而在断点命令的中间。
在 lldb 可以稳健地处理这个问题之前需要更多的清理工作,所以我们暂时不允许它。
根据您尝试执行的操作,您可能能够反转问题并从 Python 驱动整个调试会话。如果这似乎是一件有用的事情,这里有一个示例可能会让您入门:
http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/process_events.py