go - 如何解释堆栈跟踪中的负行号

标签 go

我今天对我的一个相当大的项目进行了一些更改,现在我遇到了一些奇怪的行为。因为我是个傻瓜,所以我无法回头弄清楚我做了什么。

但我的问题的主要目的是我应该如何理解打印的堆栈跟踪中的负行号。下面的 -1218 就是我的意思。

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x1 pc=0x80501f2]

goroutine 1 [running]:
server.init()              //     vv-------------RIGHT HERE
    /home/.../debugComponent.go:-1218 +0x282
_/home/.../possessions.init()
    /home/.../possessions.go:29 +0x42
_/home/.../pageWrap.init()
    /home/.../pageWrap.go:112 +0x47

main.init()
    /home/.../main.go:0 +0x3c

goroutine 2 [syscall]:

goroutine 3 [runnable]:

相关的 debugComponent.go 文件现在不是必需的,所以我删除了它看看会发生什么,文件名只是被替换为一个不同的文件名,一个不同的否定数。

在开发此应用程序时,我不得不发现很多错误,但这个错误让我感到难过。


如果有帮助,还有 main.go 和几个正在运行的包。上面列出的三个文件都是不同的包,这似乎是在导入过程中发生的。


我希望您已经读到这里,因为这是最奇怪的部分。如果我将此声明添加到 main.go,错误就会消失!

var test = func() int { return 1 }() // Everything is fine now!

非常困惑!如果我执行 var test = "foobar",它不会修复它。它必须是被调用的 func


欢迎任何见解,但我主要对跟踪中的 -1218 感到好奇。


更新

我试图将其归结为一个重现该问题的小示例。完成后,我恢复到原来的代码,并重新启动机器。

我第一次尝试构建和运行时,两个新条目被添加到堆栈跟踪的顶部。但只是第一次。

goroutine 1 [syscall]:
syscall.Syscall()
    /usr/local/go/src/pkg/syscall/asm_linux_386.s:14 +0x5
syscall.Mkdir(0x83a2f18, 0x2, 0x2, 0x806255e, 0x83a2f1c, ...)
    /usr/local/go/src/pkg/syscall/zerrors_linux_386.go:2225 +0x80
server.init()

所以这符合我关于解释堆栈跟踪的主要问题。 -1218 仍然存在,但现在有这些。

asm_linux_386.s14 行有这个:

MOVL    4(SP), AX       // syscall entry

我也找到了 zerrors_linux_386.go,但是没有 2225 行。该文件在该行之前很久就停止了。

最佳答案

它已被报告并接受为 Issue 5243 .

关于go - 如何解释堆栈跟踪中的负行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848303/

相关文章:

go - 即使设置了进程组pid,Go也不会终止基于GUI的进程

Golang 返回子结构代替父结构,就像在 C++ 中一样

xml - 使用 Go 解码 XML : How to find attributes with the same value?

map - golang map 打印乱序

oop - 戈朗 : Method expressions instances of Object

date - 如何计算结束日期

go - 将格式化程序应用于 logrus 全局记录器

go - Go 中应用上下文中的 REPL 控制台

docker - nsq 无法通过连接到 nsqlookupd 来消费消息

go - sync.WaitGroup - 为什么在 .wait() 之后出现一个 go 例程