V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lsk569937453
V2EX  ›  问与答

golang,空指针上执行方法,整个程序 hang 住了,怎么定位问题出在哪一行代码?

  •  
  •   lsk569937453 · 2019-11-26 19:06:07 +08:00 · 2309 次点击
    这是一个创建于 1605 天前的主题,其中的信息可能已经有所发展或是发生改变。
    类似代码如下:
    ================================
    var srcDbresult *sql.Rows
    srcDbresult, err = db.Query(sql);
    if err != nil {
    err = errors.Wrap(err, "db.Query error")
    print(srcDbresult.Next())
    panic(err)
    }
    =================================
    整个程序会卡在 print(srcDbresult.Next())这一行代码,
    现在就是线上有机器卡住了,我想定位问题代码。求大佬解答,小弟在此谢谢了。
    pprof 试过了不行,整个程序 hang 住后,telnet 端口都不通了
    9 条回复    2019-11-26 22:40:35 +08:00
    lsk569937453
        1
    lsk569937453  
    OP
       2019-11-26 19:07:31 +08:00
    线上问题比例子代码复杂的多的多,所以从源码入手猜哪一行代码出错,很难。
    Maboroshii
        2
    Maboroshii  
       2019-11-26 19:56:56 +08:00
    盲猜 recover 的地方有问题
    Reficul
        3
    Reficul  
       2019-11-26 20:18:21 +08:00
    空指针上执行方法不会 Hang 住,对指针解引用会 Panic 也不会 Hang 住。说卡在 print 的,是看到的还是猜的,建议 dlv 上去看堆栈信息。
    lsk569937453
        4
    lsk569937453  
    OP
       2019-11-26 20:46:32 +08:00
    @Reficul 是本地调试的,走到 srcDbresult.Next()这个就走不下去了,panic 没走到都。说 hang 住是因为进程还在,端口也在占用,telnet 端口无返回,无法处理请求也
    iamfirst
        5
    iamfirst  
       2019-11-26 20:53:11 +08:00
    srcDbresult.Next(), 是指读取记录下一条?如果查询时 err != nil,还强行读不存在的记录,然后报错?
    TheCure
        6
    TheCure  
       2019-11-26 20:58:44 +08:00
    ...正确的方法是 runtime stack trace, 看到底看看卡在那里
    winterssy
        7
    winterssy  
       2019-11-26 20:58:44 +08:00
    弱弱的问一句,调用空指针的方法不会 panic 吗,随后就 recover 了吧,还有 print 什么事?
    winterssy
        8
    winterssy  
       2019-11-26 21:06:47 +08:00
    @winterssy #7 错了,要看具体的业务逻辑
    blless
        9
    blless  
       2019-11-26 22:40:35 +08:00 via Android
    ……为啥要打印 Next 不是直接 return 或者 panic 就好?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1076 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:01 · PVG 03:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.