如何在C中调试gdb中的St9bad_alloc故障?

Nat*_*man 9 c c++ debugging gdb bad-alloc

我有一个程序失败:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  St9bad_alloc
Run Code Online (Sandbox Code Playgroud)

我想这与malloc/有关free,但我不知道哪一个.

我可以在gdb中设置什么断点来破坏错误,以便我可以查看堆栈跟踪?

该程序是C和C++的组合,使用gcc 3.4.2编译.

ale*_*xkr 14

它不是真正的malloc/free导致异常,它是"new",它绝对是你应用程序的C++部分.看起来您提供的参数太大而无法分配"新".

'std :: bad_alloc'是由以下代码引起的,例如:

 int * p = new int[50000000];
Run Code Online (Sandbox Code Playgroud)

将崩溃转储加载到gdb时,backtrace会说什么?如果无法生成转储,则可以在抛出或捕获异常时让GDB停止.不幸的是,某些版本的GDB仅支持以下语法:

catch throw
Run Code Online (Sandbox Code Playgroud)

它允许您在抛出任何异常时中断应用程序.但是,在帮助中,您会看到它应该可以运行

catch throw std::bad_alloc
Run Code Online (Sandbox Code Playgroud)

在较新的版本中.

不要忘记:

(gdb)帮忙抓住

是其他有用信息的良好来源.