Go语言打印调用堆栈

作者: kongxx | 来源:发表于2017-07-26 22:26 被阅读368次

这两天看Go的代码,呃,协程太多,无数个携程调用了一个方法,彻底看不清了,所以就想到是不是可以把调用堆栈打印出来。

查了一下,发现Go的 runtime/debug 库可以把调用堆栈打出来。下面看个例子:

package main

import (
    "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.go

goroutine 1 [running]:
runtime/debug.Stack(0x0, 0x0, 0x0)
        /usr/lib/golang/src/runtime/debug/stack.go:24 +0x80
main.test3()
        /tmp/test_stacktrace.go:17 +0x24
main.test2()
        /tmp/test_stacktrace.go:13 +0x14
main.test1()
        /tmp/test_stacktrace.go:9 +0x14
main.main()
        /tmp/test_stacktrace.go:22 +0x14

goroutine 1 [running]:
runtime/debug.Stack(0x0, 0x0, 0x0)
        /usr/lib/golang/src/runtime/debug/stack.go:24 +0x80
runtime/debug.PrintStack()
        /usr/lib/golang/src/runtime/debug/stack.go:16 +0x18
main.test3()
        /tmp/test_stacktrace.go:18 +0x101
main.test2()
        /tmp/test_stacktrace.go:13 +0x14
main.test1()
        /tmp/test_stacktrace.go:9 +0x14
main.main()
        /tmp/test_stacktrace.go:22 +0x14

相关文章

  • Go语言打印调用堆栈

    这两天看Go的代码,呃,协程太多,无数个携程调用了一个方法,彻底看不清了,所以就想到是不是可以把调用堆栈打印出来。...

  • iOS 打印函数调用堆栈

    打印调用堆栈可以借助于: callStackSymbols

  • 异常与调试

    通过try...except...finally处理异常。 调用堆栈 出现异常返回时,会打印调用堆栈 记录错误 抛...

  • zerolog日志高级使用

    使用github.com/pkg/errors打印详细的堆栈信息,输出非常友好。 设置堆栈打印详细调用过程 输出详...

  • 打印函数调用堆栈

  • 打印函数调用堆栈

    相关函数签名 backtrace():栈回溯,保存各个栈帧的地址。该函数用于获取当前线程的函数调用堆栈,获取的信息...

  • android打印调用堆栈

    java层: native层: 1.编译集成 修改Android.bp,加入callstack模块 2.引入头文件...

  • Javascript事件循环和调用堆栈

    调用堆栈 众所周知JavaScript是单线程编程语言,它只有一个单一的调用堆栈,当调用堆栈由函数在运行,它就不能...

  • cgo

    cgo cgo是用来在Go语言中调用C语言的工具 Go语言调用C语言 简单C语言函数 在Go语言中需要通过impo...

  • Linux内核分析:操作系统是如何工作的?

    函数调用堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 堆栈的几个重要功能 函数调用框架 传递参数...

网友评论

    本文标题:Go语言打印调用堆栈

    本文链接:https://www.haomeiwen.com/subject/bxhakxtx.html