这些堆栈跟踪中的数字代表什么意思?

huangapple go评论85阅读模式
英文:

What do these numbers in a stack trace mean?

问题

这些是堆栈跟踪信息,用于调试和定位代码中的错误。以下是对这些词的理解:

  • 0x467a05, 0xc000000180, 0x200000003:这些是内存地址的表示形式,用于指示在堆栈跟踪中的特定位置。
  • +0x80, +0x18, +0x101:这些是相对于当前位置的偏移量,用于指示在堆栈跟踪中的特定函数或指令的位置。偏移量可以帮助确定代码执行的位置。

请注意,这些信息通常由开发人员在调试过程中使用,以便更好地理解代码的执行流程和错误发生的位置。

英文:
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

How do you understand these words as follow?
> 0x467a05, 0xc000000180, 0x200000003
> +0x80 +0x18 +0x101

答案1

得分: 7

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

要理解它们的含义,你必须查看原始的计算机代码,或者使用调试器。调试器使用编译器留下的跟踪信息,将“计算机寄存器%rax保存了0x467a05”(或其他值)转换为“变量x保存了值…”(可能是一个字符串值)。

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

英文:

Those are the raw (computer-instruction-level) values of various arguments passed to various functions. Well, that is, the ones in parentheses—the +0x101 is the program counter offset in the machine code.

To make sense of them, you must look at the raw computer code, or use a debugger. Debuggers use trace information that the compiler leaves behind to translate from "computer register %rax holds 0x467a05" (or whatever) into "variable x holds value ..." (for some value, maybe a string for instance).

If you're not sure what they represent, concentrate instead just on the names and line numbers in the stack trace. You were in function main.test3 at line 18 when you called function PrintStack in the runtime code.

huangapple
  • 本文由 发表于 2021年8月23日 17:01:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/68889916.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定