6

#defineing_GLIBCXX_DEBUG强制 GCC 捕获 C++ 中的一大类运行时错误,例如越界 STL 访问、无效迭代器等。

不幸的是,当错误发生时,打印的消息不是很有帮助。我知道如何用函数和自己的宏打印__FILE__回溯__LINE__

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

4

2 回答 2

3

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

要使其自动化,您需要将调用更改为abort()(in libstdc++-v3/src/c++11/debug.cc)。我认为您可以将其更改为调用std::terminate(),然后安装您自己terminate_handlerset_terminate以使其打印回溯。

于 2012-07-29T00:56:29.573 回答
3

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

似乎有一个宏.../debug/macros.h,所有检查代码都使用称为_GLIBCXX_DEBUG_VERIFY. 您可以修改它以满足您的需要。

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

于 2012-07-25T22:03:25.817 回答