是否可以像这样放置堆栈跟踪......
goroutine 20 [running]:
runtime.panic(0x3a2820, 0xc2081ad4b0)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
testing.func·006()
/usr/local/go/src/pkg/testing/testing.go:416 +0x176
runtime.panic(0x3a2820, 0xc2081ad4b0)
/usr/local/go/src/pkg/runtime/panic.c:248 +0x18d
my.Test(0x3a2820, 0xc2081acf20, 0x3a2820, 0xc2081acf30, 0xc208056000)
/Users/usr/golang/src/my/testing.go:67 +0x572
...在字符串变量中,用于重新格式化并为我切断冗余信息。
这个伪代码就像这样:
package main
import (
"runtime"
)
func main() {
var stackStr string
stackStr = runtime.GetStackFromHere()
}
我尝试了panic("give me stack trace from here")
,但是它不会在var string
中打印堆栈跟踪,而只会打印到控制台。
答案 0 :(得分:7)
使用runtime.Stack函数获取堆栈跟踪:
b := make([]byte, 2048) // adjust buffer size to be larger than expected stack
n := runtime.Stack(b, false)
s := string(b[:n])
另一种方法是在循环中调用runtime.Caller并将堆栈跟踪格式化为缓冲区。