将堆栈跟踪放入字符串变量

6

是否有可能像这样放置堆栈跟踪...


请注意,我已经保留了HTML标记,并尝试使翻译通俗易懂。
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

1个回答

9

使用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并将堆栈跟踪格式化到缓冲区中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接