C++ QT5.2.0;Debian喘息:QSocketNotifier::type()segfault

C++ QT5.2.0;Debian喘息:QSocketNotifier::type()segfault,c++,multithreading,qt,C++,Multithreading,Qt,我有一个使用QThreadPool的多线程应用程序。它会在随机时间(有时几分钟,有时几小时…)后发生故障。我用调试符号重新编译并运行了GDB。这是回溯: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7231170 in QSocketNotifier::type() const () from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5 (gdb) where #0

我有一个使用QThreadPool的多线程应用程序。它会在随机时间(有时几分钟,有时几小时…)后发生故障。我用调试符号重新编译并运行了GDB。这是回溯:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7231170 in QSocketNotifier::type() const ()
   from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
(gdb) where
#0  0x00007ffff7231170 in QSocketNotifier::type() const ()
   from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#1  0x00007ffff724b732 in ?? () from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#2  0x00007ffff51d713b in g_main_context_check ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007ffff51d75c2 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007ffff51d7744 in g_main_context_iteration ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007ffff724c023 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#6  0x00007ffff71fa2cb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#7  0x00007ffff71fe33e in QCoreApplication::exec() ()
   from /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#8  0x0000000000409bb9 in main (argc=1, argv=<optimized out>) at main.cpp:166
程序接收信号SIGSEGV,分段故障。
QSocketNotifier::type()常量()中的0x00007FF7231170
from/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
(gdb)在哪里
#QSocketNotifier::type()常量()中的0 0x00007FF7231170
from/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#1 0x00007FF724B732英寸??()来自/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#2 0x00007FF51D713B位于g_主上下文检查()
来自/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007FF51D75C2英寸??()来自/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007FF51D7744在g_main_context_迭代()中
来自/lib/x86_64-linux-gnu/libglib-2.0.so.0
#来自/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5的QEventDispatcherGlib::processEvents(QFlags)()中的5 0x00007FF724C023
#来自/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5的QEventLoop::exec(QFlags)()中的6 0x00007ffff71fa2cb
#QCoreApplication::exec()中的7 0x00007FF71FE33E()
from/opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5
#main中的8 0x0000000000409bb9(argc=1,argv=)位于main。cpp:166

这是完整的回溯。它在应用程序本身中基本上没有引用/提及任何代码;这一切似乎都是导致故障的Qt库代码。由于GDB没有引用应用程序本身中的任何内容,因此不确定在本文中包含应用程序本身的哪个源。有什么想法吗?

试着在调试器中运行程序,当程序崩溃时,调试器将进入程序,并且能够看到堆栈跟踪和任何变量。您需要编译Qt的调试版本,然后将程序与之链接。谢谢。使用开发人员/调试符号编译QT产生了更有用的输出。我将打开一个新的问题,专门讨论实际问题,现在调试模式开始工作了。