当我的Cocoa应用程序在代码中遇到断言时,gdb会按预期给出一个提示,但它在正确的线程中永远不会(好的,很少)。
我知道我可以使用Xcode的GUI调试器,它使它不那么痛苦,但我认为必须有一个我不知道的gdb命令行技巧。
除了更改每个线程并发出where
之外,是否有更简单的方法来查找断言的断言?
答案 0 :(得分:3)
尼古拉建议'线程适用所有bt'。还有'信息主题',有时候可以帮助你找到你想要的那个,而且不那么详细。
假设'info threads'没有显示你想要的东西,你被迫梳理所有线程的堆栈跟踪。如果你的进程有很多线程(在某些程序中很容易就会有数百个),这可能很痛苦。您可以将每个线程显示的帧数限制为更易处理(例如5帧)
(gdb) thread apply all where 5
但即使这样也很难梳理,因为你可能不得不继续按下寻呼机提示寻找你想要的东西,并且可以轻易地错过你的目标。在这种情况下,我发现启用日志记录和削弱寻呼机的组合非常有帮助
(gdb) set height 10000
(gdb) set logging on
(gdb) thread apply all where 5
(gdb) shell
现在检查gdb.txt并找到你的主题。
答案 1 :(得分:1)
(gdb) thread apply all bt