首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  程序员

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

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

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

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

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

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

    在信号回调函数中需要严格遵循异步信号安全的原则,不能有锁,否则会死锁,处理完后需要退出进程。(常见的动态内存申请需要加锁,因此不是异步信号安全的)。
        26
    HackerPainter   354 天前
    不 coredump 的那就不叫 c++
        27
    skadi   354 天前
    我改造了好多有问题的 c++历史代码...还好他们之前知道使用有锁队列.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   877 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 21:19 · PVG 05:19 · LAX 13:19 · JFK 16:19
    ♥ Do have faith in what you're doing.