#define
ing_GLIBCXX_DEBUG
强制 GCC 捕获 C++ 中的一大类运行时错误,例如越界 STL 访问、无效迭代器等。
不幸的是,当错误发生时,打印的消息不是很有帮助。我知道如何用函数和自己的宏打印__FILE__
回溯__LINE__
。
有没有一种简单的方法可以说服 GCC 这样做,或者指定一个函数/宏在_GLIBCXX_DEBUG
实际发生捕获的错误时调用它?
当调试模式检查失败时,它会调用abort()
,因此它会转储一个核心文件,您可以使用调试器轻松检查该文件以查看失败的位置。如果您在调试器中运行程序,它将在中止时停止,您可以使用backtrace
.
要使其自动化,您需要将调用更改为abort()
(in libstdc++-v3/src/c++11/debug.cc
)。我认为您可以将其更改为调用std::terminate()
,然后安装您自己terminate_handler
的set_terminate
以使其打印回溯。
我假设您的意思是您想要在代码中打印使用上下文的消息,而不是 GCC 使用的某些内部头文件的文件名和行号。
似乎有一个宏.../debug/macros.h
,所有检查代码都使用称为_GLIBCXX_DEBUG_VERIFY
. 您可以修改它以满足您的需要。
编辑: Jonathan Wakely 指出所有检查都是致命的。