LLDB: Python API StepInstruction -不步进两次



我定义了一个断点,方法如下:

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调用,当我查看它时,我的pc是loadAddr + 4。然而,如果两个步骤指令都被执行,当我查看它时,我的pc仍然是loadAddr + 4。

由于某些原因,第二个(甚至第三个)StepInstruction对pc没有影响。

为什么?我能做些什么来达到预期的效果吗?

谢谢。

lldb在任何命令重启被调试进程后的断点上停止命令的执行。这样做有点棘手,因为您可能会在重新启动被调试程序的命令中间碰到一个断点,然后我们必须在断点命令中间重新进入命令解释器。

在lldb能够健壮地处理此操作之前,需要进行更多的清理,因此我们现在不允许这样做。

取决于你想做什么,你可能能够扭转问题&从Python驱动整个调试会话。如果这似乎是一个有用的事情,这里有一个例子可能会让你开始:

http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/process_events.py

最新更新