通過函式棧空間獲取當前呼叫函式

2022-04-02 19:23:02 字數 515 閱讀 1363

關於stacktrace的基礎可以參見**stacktrace(頑強的灰太狼)。

我們在設計日誌模組時通常會記錄兩種資訊:

1)軟體執行的業務資料

2)軟體執行的技術引數(如當前呼叫的函式堆疊)。

一下通過一下方法可以獲取當前呼叫的函式:

獲取呼叫函式

1private

static

string

getcaller()218

else

1925

else

2629}30

}31}32

33return"";

34}其中:if("

loghelper

".equals(typename) &&(

"writemessage

".equals(methodname) ||"

writelog

".equals(methodname)))

是用於判斷是否為當前日誌模組的方法,如果是則忽略。

函式呼叫 函式棧

函式呼叫大家都不陌生,呼叫者向被呼叫者傳遞一些引數,然後執行被呼叫者的 最後被呼叫者向呼叫者返回結果,還有大家比較熟悉的一句話,就是函式呼叫是在棧上發生的,那麼在計算機內部到底是如何實現的呢?對於程式,編譯器會對其分配一段記憶體,在邏輯上可以分為 段,資料段,堆,棧 段 儲存程式文字,指令指標eip...

通過函式指標呼叫函式

指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...

通過函式指標呼叫函式

指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...