我今天对我的一个相当大的项目进行了一些更改,现在我遇到了一些奇怪的行为。因为我是个傻瓜,我无法回头弄清楚我做了什么。
但是我的问题的主旨是我应该如何理解打印的堆栈跟踪中的负行号。下面-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.s
在线14
:
MOVL 4(SP), AX // syscall entry
我也找到了zerrors_linux_386.go
,但是没有行2225
。该文件在该行之前很久就停止了。