2012-11-29 94 views
1

在函數,一個可以把(對於GCC)如何獲取調用當前函數的函數名稱?

printf("%s: I am here!", __FUNCTION__); 

以指示一個特定的消息來自。現在,假設我有函數A1,A2,A3,...,它們都可以調用函數B()。我想知道是否有一個簡潔的方法來指示哪個函數在運行時調用B()。

+1

,通過'__func__'作爲參數。在你調用它時永遠不會改變的額外參數的情況下,你可能會發現一個有用的宏來調用它。 – chris

回答

2

有沒有便攜的方式來做到這一點。但是,如果您想深入研究非便攜式黑客領域,GCC會提供__builtin_return_address(),您可以通過它獲取返回地址。隨後將該地址傳遞給dladdr(也是一個非標準函數,但在大多數類Unix系統上可用)將給出該函數在二進制級別的名稱(如果任何種類的內聯可能與抽象程序級別的函數不同,基於程序間分析的優化等等)。除了調試/分析外,我不會推薦使用這些黑客技術。

我懷疑在其他平臺和編譯器上存在類似的機制。

相關問題