代码之家  ›  专栏  ›  技术社区  ›  nall

快速查找gdb中断言的线程的方法?

  •  1
  • nall  · 技术社区  · 15 年前

    当我的cocoa应用程序在代码中找到断言时,gdb会像预期的那样给我一个提示,但它永远不会(好的,很少)出现在正确的线程中。

    我知道我可以使用XCODEE的GUI调试器,它使它有点痛苦,但我认为必须有一个GDB命令行技巧我不知道。

    找到断言的线程是否比更改每个线程并发出 where ?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Nikolai Fetissov    15 年前

    (gdb) thread apply all bt

        2
  •  3
  •   Peeter Joot    14 年前

    尼古拉建议“线程应用所有bt”。也有“信息线程”,有时可以帮助你找到你想要的,而不是冗长。

    假设“info threads”没有显示您想要的内容,并且您被迫对所有线程的stacktrace进行梳理。如果你的进程有很多线程(这很容易在一些程序中是几百个),那可能会很痛苦。可以将每个线程所显示的帧数限制为更易于处理的(例如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并找到您的线程。