我用我以前没见过的东西进行回溯。看到这些线程框架2:在两个线程中同时中止()
Thread 31 (process 8752):
#0 0x00faa410 in __kernel_vsyscall()
#1 0x00b0b139 in sigprocmask() from /lib/libc.so.6
#2 0x00b0c7a2 in abort() from /lib/libc.so.6
#3 0x00752aa0 in __gnu_cxx::__verbose_terminate_handler() from /usr/lib/libstdc++.so.6
#4 0x00750505 in ??() from /usr/lib/libstdc++.so.6
#5 0x00750542 in std::terminate() from /usr/lib/libstdc++.so.6
#6 0x00750c65 in __cxa_pure_virtual() from /usr/lib/libstdc++.so.6
#7 0x00299c63 in ApplicationFunction()
Thread 1 (process 8749):
#0 0x00faa410 in __kernel_vsyscall()
#1 0x00b0ad80 in raise() from /lib/libc.so.6
#2 0x00b0c691 in abort() from /lib/libc.so.6
#3 0x00b4324b in __libc_message() from /lib/libc.so.6
#4 0x00b495b6 in malloc_consolidate() from /lib/libc.so.6
#5 0x00b4b3bd in _int_malloc() from /lib/libc.so.6
#6 0x00b4d3ab in malloc() from /lib/libc.so.6
#7 0x08147f03 in AnotherApplicationFunction()
当用gdb打开它,并获得回溯它给了我线程1.后来我看到了怪异的状态螺纹31是在这个线程是我们有问题库因此我相信这次事故是由它造成的。
那么这是什么意思?两个线程同时做非法的事情?或者它是其中的一个,导致另一个中断()?
操作系统是Linux Red Hat Enterprise 5.3,它是一个多处理器服务器。
你在Linux上,你为什么不运行valgrind(特别是memcheck,helgrind和DRD模块)? – 2011-02-23 16:51:29
谢谢,我会与他们核对。这是一个复杂的程序,valgrind通常会提供大量的东西,但我会尝试分析一些孤立的部分 – 2011-02-24 09:15:44