使用C语言中的宏来定位出错信息
? ? 編寫一個軟件時,軟件的健壯性時特別值得考慮的問題。使用C++時可以使用異常捕獲機制,在設計完軟件的模塊架構的時候然后再設計異常捕獲架構,一般來說需要設計一個異常捕獲網來捕獲程序中可能的異常。
? ? 對于異常的處理,有些情況下沒有辦法實現程序的自恢復,這時候只能無奈的輸出程序的出錯的一些信息。在我看來,這些信息具體又分為靜態信息和動態信息。靜態信息是編譯器期間確定的一些屬性,動態期間是在運行時期間才能確定的屬性。
? ? 例如,程序模塊a中的函數f的第l行出現錯誤,在輸出錯誤的時候我們要能夠輸出這些定位錯誤的信息。利用C語言提供的內置宏可以得到這些信息,常用的內置宏為:__FILE__,__LINE__,__FUNCTION__,__TIME__,分別為文件名,行號,函數名,以及該模塊對應得源文件被預處理器處理的時間。這些信息都是編譯期間確定的,也就是我所說的靜態錯誤信息。
? ? 下面是一個例子:
? ? 這個是頭文件:tmp_header.h
? ? ?下面是源文件:
? ? 輸出結果如下:
?
? ?還有一種情況就是動態信息,可以確定模塊在內存中的位置,這就是常見的堆棧跟蹤信息。可以調用庫函數backtrace實現堆棧跟蹤,這個放在下一篇文章中。
? ?還有一個庫函數也是方便調試的,就是assert函數,下面是一個assert函數的例子。assert函數根據參數情況來決定程序的運行,如果參數判定為假或者0,將對進程發出ABORT信號,默認的情況下,程序運行結束。
? ?
? ? 程序運行結果如下:
? ??
?
本文轉自hipercomer 51CTO博客,原文鏈接:http://blog.51cto.com/hipercomer/790175
總結
以上是生活随笔為你收集整理的使用C语言中的宏来定位出错信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Silverlight Toolki
- 下一篇: LintCode: Single Num