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

2018-12-24 15:52:57 +08:00
 fyooo
接手维护一个老项目,容易 coredump 的主要原因还是我菜...
4182 次点击
所在节点    程序员
27 条回复
zts1993
2018-12-25 00:55:27 +08:00
C++ : 你们菜还赖我?
congeec
2018-12-25 01:12:08 +08:00
你菜或老项目写得烂或机器内存不够硬件背锅

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

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

在信号回调函数中需要严格遵循异步信号安全的原则,不能有锁,否则会死锁,处理完后需要退出进程。(常见的动态内存申请需要加锁,因此不是异步信号安全的)。
HackerPainter
2018-12-25 10:36:21 +08:00
不 coredump 的那就不叫 c++
skadi
2018-12-25 14:43:51 +08:00
我改造了好多有问题的 c++历史代码...还好他们之前知道使用有锁队列.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX