在GDB中调试程序时,我得到一个意外退出的“程序正常”。所以我想知道是否有办法找出程序退出的地方(哪一行)。
程序是多线程的,如果重要的话。
答案 0 :(得分:11)
您可以尝试使用GDB命令break exit
在exit(2)库调用上设置断点。如果这不能满足您的需求,可能会break _exit
。在获得后一个断点之前,您可能需要使用'sta'启动程序。在任何一种情况下,您都应该能够使用where
命令来获取堆栈跟踪,以显示程序何时决定退出的位置。
答案 1 :(得分:7)
通常在应用程序执行完毕后使用以下命令:
(gdb) thread apply all bt
当然,如果您想知道确切的行,您必须使用调试符号编译您的应用程序,即-g
答案 2 :(得分:3)
在_exit上设置断点,然后检查堆栈。