运行“继续”命令后是否可以在断点后运行命令。例如,我做类似的事情:
br set -n function -C finish -C something_else
然后我得到一个错误
error: Aborting reading of commands after command #1: 'finish' continued the target.
人们如何解决这个问题?我想我可以在return指令上设置另一个断点,并将其作为命令的一部分使其删除自身,但是我无法知道需要删除的bp的ID。另外,这是一个有条件的断点,所以我不能总是在return指令上中断,也不能有条件地在return指令上中断,因为我以前在函数上中断的上下文已经消失了。
答案 0 :(得分:1)
您目前无法执行此操作。 lldb命令解释器不会重入,并且由于您的finish
可以使用自己的命令很好地命中另一个断点,因此当其中一个继续执行时,lldb退出读取第一组断点命令。
您无需在命令中删除返回断点,只需将其设为单发断点(break set -o true
),当它被命中时,它只会删除自身。
请注意,如果您的程序是多线程的,并且您要停止执行代码,那么许多线程可能会同时通过,那么您确实需要使返回断点特定于当前线程。在lldb命令行中这样做确实有些棘手,但是您可以使用Python断点回调很容易地做到这一点:
https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit