내 C++ 코드에 매우 이상한 버그가 있습니다.C++ 원치 않는 중단 원인?
전체를 이해하려면 이야기를해야합니다. boost_thread 라이브러리를 통해 스레드를 사용하고 있습니다. 주요 방법은 3 ~ 4 개 스레드를 시작하고, 일부 초기화를하게 영원히 대기보다 :
void do_work() {
try {
..
}
catch (int ei) {
}
catch (...) {
log("General error");
}
}
:
while(true) sleep(1);
모든 스레드의 주요 기능은 일부 캐치 시도 및 캐치 모든 핸들러가 스레드는
함께 데이터베이스에 기록, 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
끝없는 내가 그것을 원인이 무엇인지 전혀 모른다 호출을 중단. 스레드는 다음과 같습니다 : 스레드 1 끝없는 수면 루프를 사용하여 주요 기능이기 때문에 흥미 롭다
(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
합니다.
내 질문 : 가 어떻게 낙태의 이유를 발견 할 수 있습니다 (내가 잘못 아니에요 만약 내가 그것을 무시할 수 없기 때문에)?
포럼, IRC 채널 및 Google 검색에서 검색해보세요. 나는이 주 전에 막혔다. 그래서 어떤 정보라도 크게 감사하겠습니다!
대단히 감사합니다!
중단 점 (b abort') 맨 위에 중단 점을 고정 시키려고 했습니까? – dave
아직, 그럴 것입니다! 고마워요 :) 이 버그가 며칠 동안 나타나지 않는 상황이 있기 때문에 조금 어려워집니다. – Daniel
이 프로그램은 valgrind에서 실행하는 데 아주 좋은 후보자처럼 들립니다. 힙 손상이 계속 발생하면 (예 : 스레드 간의 경쟁 조건으로 인해) valgrind가 문제의 원인이 될 수 있습니다. –