C++的多线程后台服务很容易 coredump 啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
fyooo

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

  •  
  •   fyooo Dec 24, 2018 5128 views
    This topic created in 2684 days ago, the information mentioned may be changed or developed.
    接手维护一个老项目,容易 coredump 的主要原因还是我菜...
    27 replies   &nsp;2018-12-25 14:43:51 +08:00
    linbiaye
        1
    linbiaye  
       Dec 24, 2018
    那得看是你接手之前是不是容易 coredump
    keysona
        2
    keysona  
       Dec 24, 2018
    代码还原,看看初步怎样
    keysona
        3
    keysona  
       Dec 24, 2018
    初版
    araraloren
        4
    araraloren  
       Dec 24, 2018
    是代码菜 还是 你菜。。。
    simple2025
        5
    simple2025  
       Dec 24, 2018
    换 java,或者 golang,逃
    fyooo
        6
    fyooo  
    OP
       Dec 24, 2018
    @linbiaye 一直容易 coredump,我接手前也是每周 core 2 回的样子
    fyooo
        7
    fyooo  
    OP
       Dec 24, 2018
    @araraloren 毫无疑问是我菜...
    katsusan
        8
    katsusan  
       Dec 24, 2018
    根据这个"也"字,意思是接手后解决的 bug 数和衍生的 bug 数持平吗,根据我数年的维护经验,lz 应该是掉进坑里了:doge:
    truebaoge
        9
    truebaoge  
       Dec 24, 2018
    gdb 调试一下
    Earl
        10
    Earl  
       Dec 24, 2018
    lz 接了一个坑盘
    blless
        11
    blless  
       Dec 24, 2018 via Android
    小就重构,大的话…看钱多少
    dapang1221
        12
    dapang1221  
       Dec 24, 2018
    上 supervisor,自动重启,大家假装无事发生,还不是美滋滋
    NoAnyLove
        13
    NoAnyLove  
       Dec 24, 2018
    感觉上是没处理好多线程的同步 /临界区的问题,所以。。。。。。我觉得应该把菜加到标题里面
    littlewing
        14
    littlewing  
       Dec 24, 2018
    C++表示这锅我不背
    firebroo
        15
    firebroo  
       Dec 24, 2018
    写 c/c++我也经常 coredump。。。
    simple2025
        16
    simple2025  
       Dec 24, 2018
    还是单线程好,逃
    GeruzoniAnsasu
        17
    GeruzoniAnsasu  
       Dec 24, 2018 via Android   1
    拒绝写
    有全局对象的
    不封装 channel 或者共享内存的
    临界对象自己不带锁的
    敢于在构造函数之外的大括号内只放 new/malloc 或者析构以外只放 delete/free 的
    c++多线程程序

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

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

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

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

    在信号回调函数中需要严格遵循异步信号安全的原则,不能有锁,否则会死锁,处理完后需要退出进程。(常见的动态内存申请需要加锁,因此不是异步信号安全的)。
    HackerPainter
        26
    HackerPainter  
       Dec 25, 2018
    不 coredump 的那就不叫 c++
    skadi
        27
    skadi  
       Dec 25, 2018
    我改造了好多有问题的 c++历史代码...还好他们之前知道使用有锁队列.
    About     Help     Advertise     Blog     API     FAQ     Solana     2621 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 84ms UTC 02:15 PVG 10:15 LAX 19:15 JFK 22:15
    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