#define
_GLIBCXX_DEBUG
迫使GCC在C ++中捕获大量的运行时错误,例如越界STL访问,无效迭代器等。
不幸的是,当错误发生时,打印的消息不是很有用。我知道如何打印带有函数的回溯,以及__FILE__
和__LINE__
我自己的宏。
是否有一种简单的方法可以说服GCC这样做,或指定一个函数/宏,以便在_GLIBCXX_DEBUG
捕获的错误实际发生时调用它?
答案 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
以使其打印回溯。