29 lines
627 B
Go
29 lines
627 B
Go
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build go1.7
|
|
// +build go1.7
|
|
|
|
package pkgbits
|
|
|
|
import "runtime"
|
|
|
|
// walkFrames calls visit for each call frame represented by pcs.
|
|
//
|
|
// pcs should be a slice of PCs, as returned by runtime.Callers.
|
|
func walkFrames(pcs []uintptr, visit frameVisitor) {
|
|
if len(pcs) == 0 {
|
|
return
|
|
}
|
|
|
|
frames := runtime.CallersFrames(pcs)
|
|
for {
|
|
frame, more := frames.Next()
|
|
visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
|
|
if !more {
|
|
return
|
|
}
|
|
}
|
|
}
|