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