fmt.Printf("%s:%d %s\n", frame.File, frame.Line, frame.Function)
if !more {
break
}
}
}
4、func FuncForPC(pc uintptr) *Func
FuncForPC 是一个幽默的函数, 它可以把顺序计数器地址对应的函数的信息获取出来。假设由于内联顺序计数器对应多个函数,它前往最外面的函数。
它的前往值是一个*Func类型的值,经过*Func可以取得函数地址、文件行、函数名等信息。
除了下面获取顺序计数器的方式,也可以经过反射的方式获取函数的地址:
runtime.FuncForPC(reflect.ValueOf(foo).Pointer()).Name()
5、获取顺序堆栈
在顺序panic的时分,普通会自动把堆栈打出来,假设你想在顺序中获取堆栈信息,可以经过debug.PrintStack()打印出来。比如你在顺序中遇到一个Error,但是不希冀顺序panic,只是想把堆栈信息打印出来以便跟踪调试,你可以运用debug.PrintStack()。
抑或,你本人读取堆栈信息,本人处置和打印:
func DumpStacks() {
buf := make([]byte, 16384)
buf = buf[:runtime.Stack(buf, true)]
fmt.Printf("=== BEGIN goroutine stack dump ===http://developer.51cto.com/art/201811/\n%s\n=== END goroutine stack dump ===", buf)
}
参考 调试利器:dump goroutine 的 stacktrace。
应用堆栈信息还可以获取goroutine的id, 参考: 再谈谈获取 goroutine id 的办法
func GoID() int {
var buf [64]byte
n := runtime.Stack(buf[:], false)
idField := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0]
id, err := strconv.Atoi(idField)
if err != nil {
panic(fmt.Sprintf("cannot get goroutine id: %v", err))
}
return id
}
【编辑引荐】
简化Django开发的八个Python包
你没听说过的 Go 言语惊人优点
带你了解五种减速Go的特性和如何完成它们
Go开发者平均年薪46万?爬数据展现国际Go的市场行情究竟如何
Google力推的那些前端技术有何停顿?
(责任编辑:admin)