2011-07-20 68 views
0

當我向日誌文件報告消息(錯誤,警告等)時,我正在使用__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__與原始代碼中的函數的輸出的想法?

+4

爲什麼不使用'__LINE__'和'__FILE__'? – bdonlan

+0

@bdonlan - 我不知道那些可用。在這種情況下,它需要向記錄器添加額外的功能,這是可能的,但不是首選。 – BSchlinker

+2

你的搭配是什麼意思?找到代碼中的行?如果是這樣,爲什麼不記錄'__FILE__'和'__LINE__'? – Nobody

回答

2

__PRETTY_FUNCTION__通常與__FILE____LINE__一起使用來標識源代碼中的位置。

有關更多詳細信息,請參見Standard Predefined Macros