Go語言列印呼叫堆疊

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Go語言列印呼叫堆疊

這兩天看Go的代碼,呃,協程太多,無數個攜程調用了一個方法,徹底看不清了,所以就想到是不是可以把呼叫堆疊列印出來。

查了一下,發現Go的 runtime/debug 庫可以把呼叫堆疊打出來。下面看個例子:

package mainimport (    "fmt"    "runtime/debug")func test1() {    test2()}func test2() {    test3()}func test3() {    fmt.Printf("%s", debug.Stack())    debug.PrintStack()}func main() {    test1()}

從上面代碼可以看出,可以通過 debug.PrintStack() 直接列印,也可以通過 debug.Stack() 方法擷取堆棧然後自己列印。

運行測試

$ go run test_stacktrace.gogoroutine 1 [running]:runtime/debug.Stack(0x0, 0x0, 0x0)        /usr/lib/golang/src/runtime/debug/stack.go:24 +0x80main.test3()        /tmp/test_stacktrace.go:17 +0x24main.test2()        /tmp/test_stacktrace.go:13 +0x14main.test1()        /tmp/test_stacktrace.go:9 +0x14main.main()        /tmp/test_stacktrace.go:22 +0x14goroutine 1 [running]:runtime/debug.Stack(0x0, 0x0, 0x0)        /usr/lib/golang/src/runtime/debug/stack.go:24 +0x80runtime/debug.PrintStack()        /usr/lib/golang/src/runtime/debug/stack.go:16 +0x18main.test3()        /tmp/test_stacktrace.go:18 +0x101main.test2()        /tmp/test_stacktrace.go:13 +0x14main.test1()        /tmp/test_stacktrace.go:9 +0x14main.main()        /tmp/test_stacktrace.go:22 +0x14
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.