我正在开发一个大型应用程序(ns2),并且有人在那里放置了一个退出(1),没有任何调试或打印语句,并且正在执行它。我不想手动检查调用exit的每个文件来找出程序退出的原因。有可能确定程序退出的位置吗?它在Linux上运行并使用C ++编码。是否可以在gdb中执行类似的操作?
答案 0 :(得分:8)
不确定。在退出开始处设置断点(3)。当它破裂时,看看堆栈。
第二个选择,在truss下运行它(1)(我很确定有一个Linux版本的truss。)
事实上,我在另一个问题中遇到了另一种方法:here's a link。
答案 1 :(得分:3)
如果您提供自己的exit()
实现,那么将优先使用该实现,而不是库中的实现。{p>构建它,在调试器中加载它,在exit()
上放置一个断点,运行程序,看看它来自哪里。
或者如Charlie所述,只需在库exit()
上设置断点即可。如果您想要运行其他一些特定代码,请使用上面的方法。
答案 2 :(得分:0)
由于您似乎可以访问源代码,我只需搜索退出调用并分析代码。然后你很可能也会通过用更合适的东西替换退出来修复它。
如果您的所有代码都在 src 目录中
grep -r exit src
应该找到单词exit
的所有出现如果您无法访问该代码,请查看Charlie的建议。