繁体   English   中英

C ++意外中止原因?

[英]C++ unwanted abort causes?

我的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频道上进行搜索,并在Google上搜索相关信息-但仍然没有。 我在这周前陷入困境,因此非常感谢您提供任何信息!

非常感谢你!

SIGABRT通常在发生严重错误的情况下发送。 由于堆栈很可能被浪费,因此很难跟踪它们。

从回溯来看,您似乎正在运行一个已剥离(并且可能已优化)的可执行文件。 您是否尝试过使用-g编译和链接,以便在获得核心转储时获得更多的见解?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM