2012-07-25 59 views
5

#define荷兰国际集团_GLIBCXX_DEBUG力GCC搭上一大类在C++运行错误,如外的边界STL访问,无效迭代器等如何使GCC打印有帮助RUNTIME错误信息?

不幸的是,当错误发生时,打印的消息不是很很有帮助。我知道如何用函数打印回溯,并且使用宏我自己可以打印__FILE____LINE__

有没有简单的方法说服GCC做到这一点,或者指定一个函数/宏来调用实际发生的错误种类?

回答

3

我假设你的意思是你想要在你的代码中打印使用上下文的消息,而不是GCC使用的某些内部头文件的文件名和行号。

.../debug/macros.h似乎有一个宏,所有的检查代码使用被称为_GLIBCXX_DEBUG_VERIFY。您可以修改它以适应您的需求。

编辑: Jonathan Wakely指出所有检查都是致命的。

+0

有没有非致命的调试模式检查,如果他们都失败,他们都调用'abort()' – 2012-07-29 00:57:08

3

当调试模式检查失败时,它会调用abort(),因此它会转储一个核心文件,您可以使用调试器轻松检查该核心文件以查看其失败的位置。如果您在调试器中运行该程序,它将在中止时停止,并且您可以使用backtrace打印堆栈跟踪。

要做到这一点,您需要将呼叫更改为abort()(位于libstdc++-v3/src/c++11/debug.cc)。我认为你可以改变它来呼叫std::terminate(),然后安装自己的terminate_handlerset_terminate,使其打印回溯。