LLDB 断点命令和完成
LLDB Breakpoint Commands and Finish
在你有 运行 一个 'continuing' 命令后,是否可以在断点后执行 运行 命令。例如我做这样的事情:
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 指令上中断,因为我用来中断函数的上下文已经消失了.
您目前无法执行此操作。 lldb 命令解释器不是 re-entrant,因为你的 finish
很可能会用它自己的命令命中另一个断点,当其中一个命令继续时,lldb 退出读取第一组断点命令。
您不需要删除其命令中的return 断点,只需将其设为一次性断点(break set -o true
),当它被击中时,它会自行删除。
请注意,如果您的程序是多线程的并且您在代码中停止,许多线程可能会同时通过,那么您确实需要为当前线程创建 return 断点 thread-specific。这在 lldb command-line 中实际上有点棘手,但您可以使用 Python 断点回调很容易地做到这一点:
https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
在你有 运行 一个 'continuing' 命令后,是否可以在断点后执行 运行 命令。例如我做这样的事情:
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 指令上中断,因为我用来中断函数的上下文已经消失了.
您目前无法执行此操作。 lldb 命令解释器不是 re-entrant,因为你的 finish
很可能会用它自己的命令命中另一个断点,当其中一个命令继续时,lldb 退出读取第一组断点命令。
您不需要删除其命令中的return 断点,只需将其设为一次性断点(break set -o true
),当它被击中时,它会自行删除。
请注意,如果您的程序是多线程的并且您在代码中停止,许多线程可能会同时通过,那么您确实需要为当前线程创建 return 断点 thread-specific。这在 lldb command-line 中实际上有点棘手,但您可以使用 Python 断点回调很容易地做到这一点:
https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit