Python 和 golang 如何打印堆栈信息

有效的阅读源码

Posted by ZYT on September 17, 2019

一、Python

import traceback                                                                                                                                                                                                   

def function1():
    traceback.print_stack()
    return "function1"

def function2():
    function1()
    return

if __name__ == '__main__':
    function2()

#  File "test.py", line 12, in <module>
#    function2()
#  File "test.py", line 8, in function2
#    function1()
#  File "test.py", line 4, in function1
#    traceback.print_stack()

在需要了解的函数里面添加 traceback.print_stack() 即可打印其调用栈信息。

二、 golang

package main                                                                                                                                                                                                       

import (
    "fmt"
    "runtime/debug"
)

func main() {
    function2()
    fmt.Println("main")
}

func function1() {
    debug.PrintStack()
    fmt.Println("function1")
}

func function2() {
    function1()
    fmt.Println("function2")
}

# goroutine 1 [running]:
# runtime/debug.Stack(0x40d589, 0xc42000e1d0, 0x10)
# 	/usr/lib/go-1.10/src/runtime/debug/stack.go:24 +0xa7
# runtime/debug.PrintStack()
# 	/usr/lib/go-1.10/src/runtime/debug/stack.go:16 +0x22
# main.function1()
# 	/home/zyt/go/src/github.com/zyt312074545/test/main.go:14 +0x22
# main.function2()
# 	/home/zyt/go/src/github.com/zyt312074545/test/main.go:19 +0x22
# main.main()
# 	/home/zyt/go/src/github.com/zyt312074545/test/main.go:9 +0x22
# function1
# function2
# main

在需要了解的函数里面添加 debug.PrintStack() 即可打印其调用栈信息。