c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?

标签 c++ c debugging gdb bad-alloc

我有一个程序失败了:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  St9bad_alloc

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

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

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

最佳答案

导致异常的并不是真正的 malloc/free,它是“新的”,它肯定在您的应用程序的 C++ 部分中。看起来您提供的参数对于"new"分配来说太大了。

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

 int * p = new int[50000000];

当您将崩溃转储加载到 gdb 时,回溯会说什么? 如果不能生成dump,可以要求GDB停止when exception is thrown or caught . 遗憾的是,某些版本的 GDB 仅支持以下语法:

catch throw

它允许您在抛出任何异常时中断应用程序。 不过在help中看到应该可以运行

catch throw std::bad_alloc

在较新的版本中。

别忘了:

(gdb) help catch

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

关于c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660334/

相关文章:

c - MPI_Isend() 中的 MPI 段错误

debugging - Windows、Linux、OSX 上调试器的低级详细信息

c++ - 如何将特定大小的数组作为参数传递?

c++ - 为构造函数类中给定的参数分配内存

将 char 转换为 int [C]

c - 初始化结构中的 Sturt 数组中的字符串

c++ - 使用指向成员函数的指针时出现编译错误

c++ - 使用 REST (Firebase) 时的离线功能

c - 需要帮助澄清 C 中的一些内存引用/指针

powershell - 在 PowerShell 中检查是否处于 Debug模式