首页 > 解决方案 > 堆栈跟踪中的这些数字是什么意思?

问题描述

goroutine 1 [running]:
runtime/debug.Stack(0x467a05, 0xc000000180, 0x200000003)
        /usr/lib/golang/src/runtime/debug/stack.go:24 +0x80
runtime/debug.PrintStack()
        /usr/lib/golang/src/runtime/debug/stack.go:16 +0x18
main.test3()
        /tmp/test_stacktrace.go:18 +0x101

您如何理解以下这些词?

0x467a05, 0xc000000180, 0x200000003 +0x80 +0x18 +0x101

标签: go

解决方案


这些是传递给各种函数的各种参数的原始(计算机指令级)值。好吧,就是括号中的那些——+0x101是机器代码中的程序计数器偏移量。

要理解它们,您必须查看原始计算机代码或使用调试器。调试器使用编译器留下的跟踪信息将“计算机寄存器%rax保持0x467a05”(或其他)转换为“变量 x 保持值......”(对于某些值,例如可能是字符串)。

如果您不确定它们代表什么,请只关注堆栈跟踪中的名称和行号。当您在运行时代码中调用函数main.test3时,您在第 18 行运行。PrintStack


推荐阅读