6

我有一个 linux 程序,它以:

terminate called after throwing an instance of 'std::bad_function_call'

在调用堆栈中,我很遗憾看不到从哪里调用了错误的函数。而且它在产生这个错误之前做了很多迭代,所以我不能真正手动调试它。

有没有办法找到有问题的代码?

4

3 回答 3

11

你能从gdb设置一个catchpoint吗?你会想要执行

catch throw

在运行程序之前从 gdb 命令行执行,然后在抛出异常时会触发断点。

于 2013-04-09T15:22:01.767 回答
4

您可以使用 gdb 查看抛出异常的位置:

(gdb) catch throw

每当在您的程序中引发新的异常时,它就会停止,您将看到它发生在哪里。

于 2013-04-09T15:24:18.847 回答
1

请参考本网站。就我而言,这个问题是由使用空函数指针引起的。 http://www.cplusplus.com/reference/functional/bad_function_call/

于 2018-12-08T02:01:37.953 回答