C++的多线程后台服务很容易 coredump 啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fyooo
V2EX    程序员

C++的多线程后台服务很容易 coredump 啊

  •  
  •   fyooo 2018-12-24 15:52:57 +08:00 4922 次点击
    这是一个创建于 2563 天前的主题,其中的信息可能已经有所发展或是发生改变。
    接手维护一个老项目,容易 coredump 的主要原因还是我菜...
    27 条回复    2018-12-25 14:43:51 +08:00
    linbiaye
        1
    linbiaye  
       2018-12-24 15:58:19 +08:00
    那得看是你接手之前是不是容易 coredump
    keysona
        2
    keysona  
       2018-12-24 16:02:59 +08:00
    代码还原,看看初步怎样
    keysona
        3
    keysona  
       2018-12-24 16:03:15 +08:00
    初版
    araraloren
        4
    araraloren  
       2018-12-24 16:04:32 +08:00
    是代码菜 还是 你菜。。。
    simple2025
        5
    simple2025  
       2018-12-24 16:09:18 +08:00
    换 java,或者 golang,逃
    fyooo
        6
    fyooo  
    OP
       2018-12-24 16:09:20 +08:00
    @linbiaye 一直容易 coredump,我接手前也是每周 core 2 回的样子
    fyooo
        7
    fyooo  
    OP
       2018-12-24 16:09:42 +08:00
    @araraloren 毫无疑问是我菜...
    katsusan
        8
    katsusan  
       2018-12-24 16:23:53 +08:00
    根据这个"也"字,意思是接手后解决的 bug 数和衍生的 bug 数持平吗,根据我数年的维护经验,lz 应该是掉进坑里了:doge:
    truebaoge
        9
    truebaoge  
       2018-12-24 16:28:58 +08:00
    gdb 调试一下
    Earl
        10
    Earl  
       2018-12-24 16:53:26 +08:00
    lz 接了一个坑盘
    blless
        11
    blless  
       2018-12-24 16:56:08 +08:00 via Android
    小就重构,大的话…看钱多少
    dapang1221
        12
    dapang1221  
       2018-12-24 16:58:24 +08:00
    上 supervisor,自动重启,大家假装无事发生,还不是美滋滋
    NoAnyLove
        13
    NoAnyLove  
       2018-12-24 18:17:23 +08:00
    感觉上是没处理好多线程的同步 /临界区的问题,所以。。。。。。我觉得应该把菜加到标题里面
    littlewing
        14
    littlewing  
       2018-12-24 18:26:36 +08:00
    C++表示这锅我不背
    firebroo
        15
    firebroo  
       2018-12-24 18:40:31 +08:00
    写 c/c++我也经常 coredump。。。
    simple2025
        16
    simple2025  
       2018-12-24 18:41:52 +08:00
    还是单线程好,逃
    GeruzoniAnsasu
        17
    GeruzoniAnsasu  
       2018-12-24 22:37:54 +08:00 via Android   1
    拒绝写
    有全局对象的
    不封装 channel 或者共享内存的
    临界对象自己不带锁的
    敢于在构造函数之外的大括号内只放 new/malloc 或者析构以外只放 delete/free 的
    c++多线程程序

    一般这种不定期 core 又可能与 race 相关,哎想想就头大
    MeteorCat
        18
    MeteorCat  
       2018-12-24 22:38:56 +08:00 via Android
    我感觉楼主接盘侠了,恭喜恭喜
    0987363
        19
    0987363  
       2018-12-24 22:50:36 +08:00 via Android
    加 gdb 调呗,多半是临界区问题。。
    sinxccc
        20
    sinxccc  
       2018-12-25 00:21:21 +08:00
    容易复现的问题都不是问题…

    仔细看代码和 core,给关键部分写单元测试,总能看出来是哪儿的问题的。
    zts1993
        21
    zts1993  
       2018-12-25 00:55:27 +08:00
    C++ : 你们菜还赖我?
    congeec
        22
    congeec  
       2018-12-25 01:12:08 +08:00
    你菜或老项目写得烂或机器内存不够硬件背锅

    C++:反正这锅我不背
    sticnarf
        23
    sticnarf  
       2018-12-25 01:16:12 +08:00
    因为我菜所以喜欢 Rust 啊……
    aa514758835
        24
    aa514758835  
       2018-12-25 09:53:51 +08:00
    c++线程同步很是麻烦啊,需要考虑很多,解决方案也不少,锁、消息队列、互斥量、信号量等等,你可以看看 core 文件,段错误段在哪里~
    forcecharlie
        25
    forcecharlie  
       2018-12-25 10:16:23 +08:00
    注册 SIGTREM SIGSERV 然后在信号函数中使用 backtrace* 函数将堆栈展开输出到 bug 文件,然后使用 addr2line 去解析问题出在哪里,对于你的这种情况基本可以解决。

    我们公司的 sshd 服务器就是 C++ 编写,然后使用了 backtrace 功能,前阵子更新了 libssh 经常出现 结束连接 SIGSERV, 后来找到了是 libssh 的一个 bug。

    在信号回调函数中需要严格遵循异步信号安全的原则,不能有锁,否则会死锁,处理完后需要退出进程。(常见的动态内存申请需要加锁,因此不是异步信号安全的)。
    HackerPainter
        26
    HackerPainter  
       2018-12-25 10:36:21 +08:00
    不 coredump 的那就不叫 c++
    skadi
        27
    skadi  
       2018-12-25 14:43:51 +08:00
    我改造了好多有问题的 c++历史代码...还好他们之前知道使用有锁队列.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1174 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:46 PVG 01:46 LAX 09:46 JFK 12:46
    Do have faith in what you're doing.
    ubao msn 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