我不能完全記得GCC使用什麼庫來實現堆棧展開,它用於C++異常和調用跟蹤,我知道在C++規範中沒有定義的方法,所以任何答案都是平臺特定的。我正在使用GCC 4.9.0。C++和調用堆棧 - 可以用它來獲取行號嗎?
瞭解哪裏出了問題是非常有用的,特別是在調試過程中。因此,我經常會擴展宏,並在擴展中傳遞__LINE__
和__FILE__
。
我不是很喜歡這樣做,但它告訴你函數被調用的位置(因爲宏__LINE__
和__FILE__
位於調用位置),這非常方便!
與其使用一些基於構建條件定義的可怕宏,不如使用一些使用堆棧展開庫的有條件定義的代碼。
使用了什麼庫?編譯時可以告訴編譯器要記錄多少信息?顯然,對於發佈版本,您只需要進行異常處理。
如果不是什麼約定? C++程序員如何獲得Python和Java程序員認爲理所當然的東西 - 詳細的堆棧跟蹤。
我想一個後備,但不是非常優雅的解決方案將創建一個新的基地,我從中拋出異常,並有一個宏,反映並追加行,文件和__FUNCTION__
,但這是一個後備。
我對GCC使用什麼庫和選項給GCC來控制它放入的信息感興趣,所以請分享您的任何知識!
使用像GDB這樣的調試器。當你得到一個核心轉儲時,你會得到一個很好的堆棧跟蹤,只要你用符號編譯(-g3標誌) –
這是關於未捕獲的異常或崩潰? – Paranaix
如果我正確理解他的問題,你想要'__LINE__'之類的東西,而不是'__LINE__'這一行,你想要一個函數被調用的行嗎? – olevegard