求助:使用 Go 莫名 Panic 的问题

2020-08-11 09:37:44 +08:00
 shawngao
开发机上一直在写代码调试这样没有任何问题,直到昨天出现这样的 panic:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xb0 pc=0x458e1e6]
堆栈看了应该是没问题的

然后就一直这样,换台机器 clone 相同的代码没有问题。

环境: go version go1.13.4 darwin/amd64
使用 gin,gorm, docker mysql
2729 次点击
所在节点    Go 编程语言
23 条回复
Vegetable
2020-08-11 09:41:43 +08:00
这样信息不够吧,这报错信息太大众脸了
zhaoxj58
2020-08-11 09:41:43 +08:00
没有更详细的信息吗,比如你的代码是在哪一行 panic 的
shawngao
2020-08-11 09:47:22 +08:00
@zhaoxj58
@Vegetable
我确定不是代码问题,所以没贴
事实上注释掉那一段还是会 panic
zchlwj
2020-08-11 09:48:36 +08:00
这不是说的很清楚嘛?空指针 至于为啥空指针,根据上面的信息,你觉得能知道嘛?
shawngao
2020-08-11 09:49:44 +08:00
@Vegetable
@zhaoxj58
我确定是环境问题,和系统内存不足现象差不多。
是分配不到足够内存所以空指针类似

但我的开发机内存应该是够的
lwldcr
2020-08-11 09:50:44 +08:00
感觉是代码有 bug,换台机器没有问题可能只是没有跑到使用这个 nil 变量的逻辑

盲猜是声明了某个 pointer 类型的变量但没有初始化
shawngao
2020-08-11 09:51:18 +08:00
@zchlwj 我只是想问下有没有碰到类似状况的老哥,如果代码问题我就不贴了
hq136234303
2020-08-11 09:53:31 +08:00
很多都是初始化问题。没注意或者没调用吧
hopingtop
2020-08-11 09:54:10 +08:00
这种情况多数是自身写的 BUG 所致,看看是否用到了 goroutine, 如果用到了,那么人肉编译,就不一定看得出来问题。如果是必然现象就断点,如果必然现象,就再好好理一理代码吧。特别是一些 初始化的问题。多看看
baiyi
2020-08-11 09:55:18 +08:00
大概率代码问题,如果是机器问题会有其他报错
shawngao
2020-08-11 09:56:57 +08:00
我查到了,是运行目录的问题,所以找不到配置目录初始化。
但为啥会出现运行目录不对的问题,我还得再查一下

多谢各位老哥
GoLand
2020-08-11 09:58:08 +08:00
遇到过。就是代码有 bug 。
zarte
2020-08-11 09:58:26 +08:00
在错误之前把变量打印出来看看
如果不是代码问题记得到时 @我下
wangritian
2020-08-11 10:00:39 +08:00
有没有把指针转为 uintptr,过一阵又转回去取内容的
tikazyq
2020-08-11 10:00:41 +08:00
感觉是 cast 了 nil 值变量导致的
shawngao
2020-08-11 10:16:18 +08:00
已经解决问题,是代码问题,但不是代码直接导致的。

具体原因是这样,昨天我写了个读配置文件的函数,这个函数查找 conf 目录下所有子目录,然后再查找所有子目录下的所有配置文件。

代码因为用了回调,在没找到配置文件时提前返回了。


然后没问题是因为没提前返回,但昨天打开过这个目录,多了个.DS_Store,就出问题了
.DS_Store 又被 gitignore 了
另外一台电脑没有.DS_Store,所以没问题

结贴,谢谢大家


@Vegetable
@zhaoxj58
@zchlwj
@lwldcr
@hq136234303
@hopingtop
@baiyi
@GoLand
@zarte
@wangritian
@tikazyq
shawngao
2020-08-11 10:25:36 +08:00
因为现在是独立开发,遇到问题容易陷死胡同,不过一般不太会有问题,真的很感谢大家。
situs
2020-08-11 10:49:10 +08:00
debug.Stack() 可以加一下 有助于 debug
reus
2020-08-11 11:38:10 +08:00
最烦这种自以为“确定不是代码问题”的
Mohanson
2020-08-11 11:45:15 +08:00
建议楼主看一下这篇文章的前半部分: http://accu.cc/content/gameboy/other/test/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX