在函數,一個可以把(對於GCC)如何獲取調用當前函數的函數名稱?
printf("%s: I am here!", __FUNCTION__);
以指示一個特定的消息來自。現在,假設我有函數A1,A2,A3,...,它們都可以調用函數B()。我想知道是否有一個簡潔的方法來指示哪個函數在運行時調用B()。
在函數,一個可以把(對於GCC)如何獲取調用當前函數的函數名稱?
printf("%s: I am here!", __FUNCTION__);
以指示一個特定的消息來自。現在,假設我有函數A1,A2,A3,...,它們都可以調用函數B()。我想知道是否有一個簡潔的方法來指示哪個函數在運行時調用B()。
你可以簡單地使用backtrace()
(這是不完全可移植的任一)
請參閱此鏈接:如果你想有一個標準的方式 http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html
有沒有便攜的方式來做到這一點。但是,如果您想深入研究非便攜式黑客領域,GCC會提供__builtin_return_address()
,您可以通過它獲取返回地址。隨後將該地址傳遞給dladdr
(也是一個非標準函數,但在大多數類Unix系統上可用)將給出該函數在二進制級別的名稱(如果任何種類的內聯可能與抽象程序級別的函數不同,基於程序間分析的優化等等)。除了調試/分析外,我不會推薦使用這些黑客技術。
我懷疑在其他平臺和編譯器上存在類似的機制。
,通過'__func__'作爲參數。在你調用它時永遠不會改變的額外參數的情況下,你可能會發現一個有用的宏來調用它。 – chris