运行时计数器退出代码139,但gdb完成

uly*_*is2 17 c++ gdb segmentation-fault undefined-behavior

我的问题听起来很具体,但我怀疑它仍然可能是C++调试问题.

我正在使用omnet ++来模拟无线网络.omn​​et ++本身就是一个c ++程序.

当我运行我的程序时遇到了一个奇怪的现象(在Ubuntu 12.04中使用omnet ++ 4.2.2修改了inet框架):程序退出时退出代码139(人们说这意味着内存碎片)当触摸代码的某一部分时,当我尝试调试,gdb没有报告模拟退出的"有问题"代码有什么问题,实际上,调试通过这部分代码并输出预期结果.

gdb版本信息:GNU gdb(Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04

有谁可以告诉我为什么运行失败但调试没有?

非常感谢!

Emp*_*ian 31

退出代码139(人们说这意味着内存碎片)

不,这意味着你的程序死于信号11(SIGSEGV在Linux和大多数其他UNIX上),也称为segmentation fault.

有谁可以告诉我为什么运行失败但调试没有?

您的程序显示未定义的行为,并且可以执行任何操作(包括有时可能正常工作).

你的第一个步骤应该Valgrind的下运行此程序,并修复它报告的所有错误.

如果做上述后,程序仍然崩溃,那么你就应该让它核心转储(ulimit -c unlimited; ./a.out),然后分析其与GDB是核心转储:gdb ./a.out core; 然后使用where命令.