當我向日誌文件報告消息(錯誤,警告等)時,我正在使用__PRETTY_FUNCTION__
。這確保了關於哪個功能創建錯誤消息沒有混淆。在運行時間執行前確定__PRETTY_FUNCTION__的值
目前,我想自動從日誌文件中獲取輸出,並將其與最初創建它的代碼鏈接起來。問題是,我無法確定將日誌文件中的__PRETTY_FUNCTION__
輸出與代碼中的函數名稱進行匹配的有效方法。
最初,我希望我可以用gcc -E
擴展所有宏常量/預處理器組件,並直接比較日誌文件的輸出與原始代碼。但是,__PRETTY_FUNCTION__
不是一個宏常量 - 它顯然是一個在運行時確定的變量。因此,gcc -E
不起作用。
從http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html:
這些標識符是不預處理宏。在GCC 3.3及更早版本中,僅C中的 ,
__FUNCTION__
和__PRETTY_FUNCTION__
被視爲字符串 文字;它們可以用來初始化char數組,並且它們可以與其他字符串字面值串聯起來。 GCC 3.4和更高版本將其作爲變量處理 ,如__func__
。在C++中,__FUNCTION__
和__PRETTY_FUNCTION__
一直是變量。
任何關於如何有效地匹配__PRETTY_FUNCTION__
與原始代碼中的函數的輸出的想法?
爲什麼不使用'__LINE__'和'__FILE__'? – bdonlan
@bdonlan - 我不知道那些可用。在這種情況下,它需要向記錄器添加額外的功能,這是可能的,但不是首選。 – BSchlinker
你的搭配是什麼意思?找到代碼中的行?如果是這樣,爲什麼不記錄'__FILE__'和'__LINE__'? – Nobody