1 回答

TA貢獻1796條經(jīng)驗 獲得超4個贊
您最好使用runtime.Callers
獲取單個項目而不是嘗試將堆棧解析為字節(jié)。
這就是github.com/pkg/errors
這里的作用:https ://github.com/pkg/errors/blob/master/stack.go#L163:1 。您可以看到它runtime.Callers
已經(jīng)能夠跳過某些級別。
從uintptr
需要你可以看到,這是相當?shù)偷乃?。但是,您應該沒問題,只需復制callers
函數(shù)和它所依賴的所有內(nèi)容,并使用該StackTrace
函數(shù)來獲得更有用的單個Frame
s 堆棧:https ://github.com/pkg/errors/blob/master/stack.go#L155
然后可以增強框架以返回函數(shù)名稱、文件、行號等。如何提取這些信息可以在不同的私有函數(shù)中看到Frame
:https ://github.com/pkg/errors/blob/master/ stack.go#L23
我在我們的本地錯誤包中做了同樣的事情,以便能夠調(diào)整堆棧的打印方式。這可以在 a 的Format
函數(shù)中進行調(diào)整Frame
。
注意:可能不是最簡單的解決方案,因為這會使您接觸到一些低級的東西,但我更喜歡它隨時解析已經(jīng)打印的堆棧。
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報