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,使其打印回溯。