我在我的C++代碼中有一個非常奇怪的錯誤。C++不需要的中止原因?
我必須告訴你這個故事才能理解整體。 我正在使用線程通過boost_thread庫。 主要方法使得一些初始化,啓動3-4線程,比等待永遠:
while(true) sleep(1);
的所有線程的主要功能有一些趕上一個嘗試,一個包羅萬象的處理程序:
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頻道和谷歌搜索 - 但仍然沒有。 本週前我陷入困境,所以任何信息都非常感謝!
非常感謝!
你有沒有試過在abort('b abort')頂部插入一個斷點? – dave
還沒有,我會的!謝謝:) 這是有點困難,因爲有些情況下,這個錯誤不會顯示幾天.. – Daniel
這個程序聽起來像是一個非常好的候選人在valgrind下運行。如果發生堆損壞(例如,由於線程之間的競爭狀況),valgrind可能會導致您找到問題的根源。 –