第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在go中將回溯堆棧拆分為結構

在go中將回溯堆棧拆分為結構

Go
嗶嗶one 2022-06-27 15:54:47
我正在尋找一種在golang中記錄回溯堆棧的方法,但只有其中的一些行。正如我所看到的,它可以通過將從 debug.Stack() 獲得的結果拆分為一個結構切片來完成,然后可以輕松地對其進行解析。這就是我現(xiàn)在通過調(diào)用“fmt.Println(string(debug.Stack()))”得到的結果:goroutine 1 [running]:runtime/debug.Stack(0xc0000c0050, 0x2, 0x0)        /go/go1.15rc1/src/runtime/debug/stack.go:24 +0x9fmain.go_logger(0x4cc235, 0x11, 0x4ccf9d, 0x15, 0xc000090101)        /go/src/ethernet_monitor/info.go:30 +0x290main.temp(...)        /go/src/ethernet_monitor/info.go:40main.main()        /go/src/ethernet_monitor/info.go:45 +0x52這就是我希望它被拆分的方式,類似于 python 的 traceback.extract_stack() 結構:fileName: /go/src/ethernet_monitor/info.gofunction: main.main()lineNumber: 45所以問題是 - 它是否已經(jīng)以某種方式實施了?我對編寫自己的解析函數(shù)不是很有信心,因為我可能會錯過一些特定的案例。
查看完整描述

1 回答

?
SMILET

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ù)來獲得更有用的單個Frames 堆棧:https ://github.com/pkg/errors/blob/master/stack.go#L155

然后可以增強框架以返回函數(shù)名稱、文件、行號等。如何提取這些信息可以在不同的私有函數(shù)中看到Framehttps ://github.com/pkg/errors/blob/master/ stack.go#L23

我在我們的本地錯誤包中做了同樣的事情,以便能夠調(diào)整堆棧的打印方式。這可以在 a 的Format函數(shù)中進行調(diào)整Frame

注意:可能不是最簡單的解決方案,因為這會使您接觸到一些低級的東西,但我更喜歡它隨時解析已經(jīng)打印的堆棧。


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號