V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
shawngao
V2EX  ›  Go 编程语言

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

  •  
  •   shawngao · 2020-08-11 09:37:44 +08:00 · 2619 次点击
    这是一个创建于 1352 天前的主题,其中的信息可能已经有所发展或是发生改变。
    开发机上一直在写代码调试这样没有任何问题,直到昨天出现这样的 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
    Vegetable
        1
    Vegetable  
       2020-08-11 09:41:43 +08:00   ❤️ 1
    这样信息不够吧,这报错信息太大众脸了
    zhaoxj58
        2
    zhaoxj58  
       2020-08-11 09:41:43 +08:00 via iPhone   ❤️ 1
    没有更详细的信息吗,比如你的代码是在哪一行 panic 的
    shawngao
        3
    shawngao  
    OP
       2020-08-11 09:47:22 +08:00
    @zhaoxj58
    @Vegetable
    我确定不是代码问题,所以没贴
    事实上注释掉那一段还是会 panic
    zchlwj
        4
    zchlwj  
       2020-08-11 09:48:36 +08:00
    这不是说的很清楚嘛?空指针 至于为啥空指针,根据上面的信息,你觉得能知道嘛?
    shawngao
        5
    shawngao  
    OP
       2020-08-11 09:49:44 +08:00
    @Vegetable
    @zhaoxj58
    我确定是环境问题,和系统内存不足现象差不多。
    是分配不到足够内存所以空指针类似

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

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

    多谢各位老哥
    GoLand
        12
    GoLand  
       2020-08-11 09:58:08 +08:00   ❤️ 1
    遇到过。就是代码有 bug 。
    zarte
        13
    zarte  
       2020-08-11 09:58:26 +08:00   ❤️ 1
    在错误之前把变量打印出来看看
    如果不是代码问题记得到时 @我下
    wangritian
        14
    wangritian  
       2020-08-11 10:00:39 +08:00   ❤️ 1
    有没有把指针转为 uintptr,过一阵又转回去取内容的
    tikazyq
        15
    tikazyq  
       2020-08-11 10:00:41 +08:00   ❤️ 1
    感觉是 cast 了 nil 值变量导致的
    shawngao
        16
    shawngao  
    OP
       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
        17
    shawngao  
    OP
       2020-08-11 10:25:36 +08:00
    因为现在是独立开发,遇到问题容易陷死胡同,不过一般不太会有问题,真的很感谢大家。
    situs
        18
    situs  
       2020-08-11 10:49:10 +08:00
    debug.Stack() 可以加一下 有助于 debug
    reus
        19
    reus  
       2020-08-11 11:38:10 +08:00   ❤️ 4
    最烦这种自以为“确定不是代码问题”的
    Mohanson
        20
    Mohanson  
       2020-08-11 11:45:15 +08:00 via Android   ❤️ 1
    建议楼主看一下这篇文章的前半部分: http://accu.cc/content/gameboy/other/test/
    shawngao
        21
    shawngao  
    OP
       2020-08-11 12:05:57 +08:00
    @reus 是的,我也很确定一定是我的问题,只是一时没找到头绪,谢谢!
    shawngao
        22
    shawngao  
    OP
       2020-08-11 12:10:57 +08:00
    只是当时我确定不是堆栈那段代码的问题,所以没贴。
    事后呢,我检讨自己之前下结论过于草率,以为只是环境的问题。
    作为一个多年的老 RD,我明白这次问题在于太急于写业务,没有能够静下心来想一想。
    甚至我忽略了一开始的直觉,没办法,除了开发还要操心一堆事情
    imzcg2
        23
    imzcg2  
       2020-08-11 12:29:06 +08:00
    所以是 mac 祸嗐了你?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3236 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:41 · PVG 20:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.