C ++程序意外退出,如何使用gdb进行调试?

时间:2010-09-30 13:16:38

标签: c++ unit-testing debugging gdb googletest

我正在编写一个程序,对我的同事编写的代码运行一些单元测试。我正在使用Google C++ testing framework。我运行一个产生3个线程的函数,然后运行30秒。运行后,程序以状态0退出。显然,这不是预期的行为。我知道它不会更进一步,因为我在下一个直线上发表了一个cout声明。

我的问题是,使用gdb进行调试的最佳方法是什么?这很困难,因为程序不会出现段错或类似的东西,它只是退出。有没有办法挂钩退出电话,然后得到一个很长的回溯?

感谢您的帮助。

编辑:

cSystemCfg* pSystemCfg = new cSystemCfg();
std::cout << "Before runThing" << std::endl;
pSomething->runThing(&acq, pHwIf, pSystemCfg, pIf);
//Exits here, never gets to the next line
std::cout << "After runThing" << std::endl;

2 个答案:

答案 0 :(得分:3)

除了break exit之外,还有一些其他地方可能需要设置断点。看看this question and answers

答案 1 :(得分:2)

gdb中的简单break exit命令应该停止程序,并允许您检查程序从任何线程调用exit时的状态。

这当然是假设程序以exit被调用而结束,而不是出于某些其他原因,例如abort,断言失败,未处理的异常或从main返回。