如何使GCC打印有用的RUNTIME错误消息?

时间:2012-07-25 21:34:26

标签: c++ gcc g++

#define _GLIBCXX_DEBUG迫使GCC在C ++中捕获大量的运行时错误,例如越界STL访问,无效迭代器等。

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

是否有一种简单的方法可以说服GCC这样做,或指定一个函数/宏,以便在_GLIBCXX_DEBUG捕获的错误实际发生时调用它?

2 个答案:

答案 0 :(得分:3)

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

.../debug/macros.h中似乎有一个宏,所有检查代码都使用名为_GLIBCXX_DEBUG_VERIFY的宏。您可以根据自己的需要进行修改。

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

答案 1 :(得分:3)

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

要实现自动操作,您需要将呼叫更改为abort()(在libstdc++-v3/src/c++11/debug.cc中)。我认为您可以将其更改为致电std::terminate(),然后使用terminate_handler安装自己的set_terminate以使其打印回溯。