gpt4 book ai didi

C++ 不需要的中止原因?

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:23 25 4
gpt4 key购买 nike

我的 C++ 代码中有一个非常奇怪的错误。

我必须告诉你这个故事才能理解整个故事。我通过 boost_thread 库使用线程。main 方法进行一些初始化,启动 3-4 个线程,然后永远等待:

while(true) sleep(1);

所有线程的主要函数都尝试使用一些 catch 和 catch all 处理程序:

void do_work() {
try {
..
}
catch (int ei) {
}
catch (...) {
log("General error");
}
}

线程执行各种任务,例如

  • 使用 execv 函数执行脚本,
  • 使用sqlite库写入数据库,
  • 通过 openssl 库与世界交流。

有些时候,不是经常,而是很频繁地烦人的程序被终止。

一切都在应该的时候被正确地释放和删除,所以这不是问题所在。我让它生成核心转储以便有机会调试问题。

现在有趣的部分来了:GDB 的回溯看起来像这样:

(gdb) bt
#0 0x40281ae8 in raise () from /lib/libc.so.6
#1 0x402830ec in abort () from /lib/libc.so.6
#2 0x402830ec in abort () from /lib/libc.so.6
#3 0x402830ec in abort () from /lib/libc.so.6
#4 0x402830ec in abort () from /lib/libc.so.6
#5 0x402830ec in abort () from /lib/libc.so.6
#6 0x402830ec in abort () from /lib/libc.so.6
#7 0x402830ec in abort () from /lib/libc.so.6
#8 0x402830ec in abort () from /lib/libc.so.6
#9 0x402830ec in abort () from /lib/libc.so.6

无休止的中止调用,我不知道是什么原因造成的。线程看起来像这样:

(gdb) info threads
4 Thread 490 0x402e7bf4 in nanosleep () from /lib/libc.so.6
3 Thread 489 0x4031b384 in accept () from /lib/libc.so.6
2 Thread 501 0x402e7bf4 in nanosleep () from /lib/libc.so.6
* 1 Thread 486 0x40281ae8 in raise () from /lib/libc.so.6

这也很有趣,因为线程 1 是具有无限休眠循环的主函数。

我的问题:我怎样才能找出流产的原因(如果我没记错的话,我不能忽略它)?

在论坛、IRC channel 和 google 上搜索它——但仍然一无所获。几周前我遇到了困难,所以非常感谢任何信息!

非常感谢!

最佳答案

SIGABRT 通常在事情变得非常非常错误时发送。它们可能很难追踪,因为堆栈很可能已被丢弃。

从回溯来看,您似乎正在使用剥离的(可能是优化的)可执行文件运行。您是否尝试过使用 -g 进行编译和链接,以便在获得 coredump 时获得更多洞察力?

关于C++ 不需要的中止原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com