我有下面的代码,它根据运行的位置打印不同的程序计数器值。
代码:
package main
import (
"fmt"
"runtime"
)
func foo() {
bar()
}
func bar() {
pcs := make([]uintptr, 10)
_ = runtime.Callers(0, pcs)
for _, pc := range pcs {
fmt.Printf("Value of pc %+v\n", runtime.FuncForPC(pc).Name())
}
}
func main() {
foo()
}
运行 usinggo run或编译的二进制文件时,它会打印 ( main.baris missing)
Value of pc runtime.Callers
Value of pc runtime.Callers
Value of pc main.main
Value of pc main.foo
Value of pc runtime.main
Value of pc runtime.goexit
从 Visual Studio Code 运行代码时(仅在调试模式下,它工作正常)
Value of pc runtime.Callers
Value of pc main.bar
Value of pc main.foo
Value of pc main.main
Value of pc runtime.main
Value of pc runtime.goexit
在Playground中运行时,( foo, bar, 两者都缺失)
Value of pc runtime.Callers
Value of pc runtime.Callers
Value of pc main.main
Value of pc main.main
Value of pc runtime.main
Value of pc runtime.goexit
我正在使用一个框架(logrus),它依赖于 PC 的顺序来执行一些操作(记录文件名)。
由于 PC 值会根据其运行位置不断变化,因此它在调试模式下工作,但在使用go run或编译的二进制文件运行时会失败。
知道是什么导致 PC 加载不同吗?任何正在启动的配置或优化?
哆啦的时光机
相关分类