#define
荷蘭國際集團_GLIBCXX_DEBUG
力GCC搭上一大類在C++運行錯誤,如外的邊界STL訪問,無效迭代器等如何使GCC打印有幫助RUNTIME錯誤信息?
不幸的是,當錯誤發生時,打印的消息不是很很有幫助。我知道如何用函數打印回溯,並且使用宏我自己可以打印__FILE__
和__LINE__
。
有沒有簡單的方法說服GCC做到這一點,或者指定一個函數/宏來調用實際發生的錯誤種類?
#define
荷蘭國際集團_GLIBCXX_DEBUG
力GCC搭上一大類在C++運行錯誤,如外的邊界STL訪問,無效迭代器等如何使GCC打印有幫助RUNTIME錯誤信息?
不幸的是,當錯誤發生時,打印的消息不是很很有幫助。我知道如何用函數打印回溯,並且使用宏我自己可以打印__FILE__
和__LINE__
。
有沒有簡單的方法說服GCC做到這一點,或者指定一個函數/宏來調用實際發生的錯誤種類?
我假設你的意思是你想要在你的代碼中打印使用上下文的消息,而不是GCC使用的某些內部頭文件的文件名和行號。
.../debug/macros.h
似乎有一個宏,所有的檢查代碼使用被稱爲_GLIBCXX_DEBUG_VERIFY
。您可以修改它以適應您的需求。
編輯: Jonathan Wakely指出所有檢查都是致命的。
當調試模式檢查失敗時,它會調用abort()
,因此它會轉儲一個核心文件,您可以使用調試器輕鬆檢查該核心文件以查看其失敗的位置。如果您在調試器中運行該程序,它將在中止時停止,並且您可以使用backtrace
打印堆棧跟蹤。
要做到這一點,您需要將呼叫更改爲abort()
(位於libstdc++-v3/src/c++11/debug.cc
)。我認爲你可以改變它來呼叫std::terminate()
,然後安裝自己的terminate_handler
與set_terminate
,使其打印回溯。
有沒有非致命的調試模式檢查,如果他們都失敗,他們都調用'abort()' – 2012-07-29 00:57:08