c++ - 仅针对未捕获的 C++ 异常的 gdb 捕获点?

标签 c++ exception gdb breakpoints

我可以通过使用 gdb 命令设置捕获点来告诉 gdb 调试器在引发任何 C++ 异常时立即停止

catch throw

但是,有没有办法只在 未捕获 C++ 异常(如在 C# 或 Java 中)处停止?这会让在某些情况下更容易发现错误。

谢谢!

最佳答案

如果一个异常未被捕获,特殊库函数 terminate() 被自动调用。 Terminate 实际上是指向函数的指针,默认值是标准 C 库函数 abort() .您也许可以在调用 abort() 时设置断点。函数并从那里识别未捕获异常的位置。

break abort
...
run
...
bt

您可以安装自己的 terminate() 函数使用 std::set_terminate() 。您应该能够在 gdb 中的终止函数上设置断点。您也许能够从您的 terminate() 生成堆栈回溯。 函数和此回溯可能有助于识别异常的位置。提供更多详细信息here .

关于c++ - 仅针对未捕获的 C++ 异常的 gdb 捕获点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718944/

相关文章:

c# - BackgroundWorker 中未处理的异常

java - 在 Camel 中抛出带有自定义错误消息的异常

gdb - cygwin gdb 程序收到信号?,未知信号

python - 使用 gdb 时数据目录中有多个目录

c++ - 整数提升、有符号/无符号和 printf

java websocket EOFException发生

c++ - 如何将 Borland C++ 5.02 应用程序迁移到 Windows 7?

c++ - 多线程 - 系统创建的附加线程?

java - 数组如何传递给函数?

c++ - 如何使用 Valgrind 和 Qt Creator 调试远程应用程序?