Golang Go语言中求助:使用 Go 莫名 Panic 的问题
Golang Go语言中求助:使用 Go 莫名 Panic 的问题
开发机上一直在写代码调试这样没有任何问题,直到昨天出现这样的 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
更多关于Golang Go语言中求助:使用 Go 莫名 Panic 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这样信息不够吧,这报错信息太大众脸了
更多关于Golang Go语言中求助:使用 Go 莫名 Panic 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
没有更详细的信息吗,比如你的代码是在哪一行 panic 的
我确定不是代码问题,所以没贴
事实上注释掉那一段还是会 panic
这不是说的很清楚嘛?空指针 至于为啥空指针,根据上面的信息,你觉得能知道嘛?
我确定是环境问题,和系统内存不足现象差不多。
是分配不到足够内存所以空指针类似
但我的开发机内存应该是够的
我只是想问下有没有碰到类似状况的老哥,如果代码问题我就不贴了
很多都是初始化问题。没注意或者没调用吧
这种情况多数是自身写的 BUG 所致,看看是否用到了 goroutine, 如果用到了,那么人肉编译,就不一定看得出来问题。如果是必然现象就断点,如果必然现象,就再好好理一理代码吧。特别是一些 初始化的问题。多看看
大概率代码问题,如果是机器问题会有其他报错
我查到了,是运行目录的问题,所以找不到配置目录初始化。
但为啥会出现运行目录不对的问题,我还得再查一下
多谢各位老哥
遇到过。就是代码有 bug 。
在错误之前把变量打印出来看看
如果不是代码问题记得到时 @我下
感觉是 cast 了 nil 值变量导致的
已经解决问题,是代码问题,但不是代码直接导致的。
具体原因是这样,昨天我写了个读配置文件的函数,这个函数查找 conf 目录下所有子目录,然后再查找所有子目录下的所有配置文件。
代码因为用了回调,在没找到配置文件时提前返回了。
然后没问题是因为没提前返回,但昨天打开过这个目录,多了个.DS_Store,就出问题了
.DS_Store 又被 gitignore 了
另外一台电脑没有.DS_Store,所以没问题
结贴,谢谢大家
因为现在是独立开发,遇到问题容易陷死胡同,不过一般不太会有问题,真的很感谢大家。
debug.Stack() 可以加一下 有助于 debug
最烦这种自以为“确定不是代码问题”的
建议楼主看一下这篇文章的前半部分: http://accu.cc/content/gameboy/other/test/
是的,我也很确定一定是我的问题,只是一时没找到头绪,谢谢!
只是当时我确定不是堆栈那段代码的问题,所以没贴。
事后呢,我检讨自己之前下结论过于草率,以为只是环境的问题。
作为一个多年的老 RD,我明白这次问题在于太急于写业务,没有能够静下心来想一想。
甚至我忽略了一开始的直觉,没办法,除了开发还要操心一堆事情
所以是 mac 祸嗐了你?
在Go语言中遇到莫名的panic通常是由运行时错误引起的,这些错误可能是内存访问违规、数组越界、空指针引用等。为了定位和解决panic问题,你可以按照以下步骤进行排查:
-
查看panic信息:
- 当程序panic时,Go会打印出错误信息和堆栈跟踪。仔细阅读这些信息,通常可以初步判断panic的原因。
-
使用defer和recover:
- 在可能panic的代码块中使用
defer
和recover
来捕获panic,并记录错误信息和堆栈,这样可以避免程序崩溃,并获取更详细的错误信息。
- 在可能panic的代码块中使用
-
检查指针和接口:
- 确保你没有将nil值赋给非指针类型的变量,或者错误地将nil接口值当作具体类型使用。
-
数组和切片操作:
- 仔细检查所有数组和切片的索引操作,确保没有越界访问。
-
并发编程:
- 如果你在使用goroutines和channels进行并发编程,确保没有数据竞争和死锁问题。使用Go的race detector工具可以帮助检测这些问题。
-
单元测试:
- 编写单元测试来覆盖你的代码,特别是那些可能panic的代码路径。这有助于在开发阶段早期发现问题。
-
代码审查:
- 如果问题依然无法解决,可以邀请同事进行代码审查,有时候新鲜的视角能帮助发现问题所在。
按照这些步骤逐一排查,通常可以定位并解决Go程序中的panic问题。