我知道如何创建/修改断点仅在使用breakpoint modify <breakpoint-id> -T <thread-name>
的特定线程上停止,但我可以用另一种方式来做,防止断点在特定线程上停止吗?
我有一个日志线程,使用相同的函数,我试图在其他线程上调试,这是恼人的,不得不让它继续每次它命中。
您可以使用lldb Python API和Python断点回调来完成这类事情。回调函数返回一个"应该停止"值,即如果返回True,则在断点处停止,返回False则继续。
例如:
(lldb) breakpoint command add -s python -o 'return frame.thread.name != "MyThread"'
就是你想要的。注意,在这个例子中,我没有提供断点ID。在lldb中,这意味着"在最后设置的断点上执行"。但是,如果您想要添加命令的断点碰巧不是您设置的最后一个断点,您也可以提供断点ID。如果你想把它添加到多个断点,你可以指定一个断点ID列表。
这里有更多关于API和回调格式的信息:
https://lldb.llvm.org/python_api.html
https://lldb.llvm.org/use/python-reference.html running-a-python-script-when-a-breakpoint-gets-hit
但是,请注意,带有应该停止回调的断点将在每次遇到断点时强制停止。LLDB自动继续非常快,所以对于许多应用程序来说这不是问题。但是仅仅从停止到调试器再返回并不便宜,所以如果您的断点在工作循环中并且每秒被击中数十万次,这将减慢运行速度。如果这最终成为一个问题,并且你控制了你的源代码,像Eljay在评论中建议的技巧真的很方便。