求助:使用 Go 莫名 Panic 的问题 - V2EX
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 3010 次点击
    这是一个创建于 1890 天前的主题,其中的信息可能已经有所发展或是发生改变。
    开发机上一直在写代码调试这样没有任何问题,直到昨天出现这样的 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     Solana     5907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 03:08 PVG 11:08 LAX 20:08 JFK 23:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86