GDB回溯中没有本地错误

GDB No locals error in backtrace

本文关键字:错误 回溯 GDB      更新时间:2023-10-16

我有一个自定义实现HTTP服务器的应用程序它使用HTTPRequest类来解析HTTP请求,RequestHandler类来处理调用和断开连接事件。服务器是多线程的,但是扫描器对象是单线程的。

应用程序保持崩溃在随机间隔,所以我无法重现这个错误,因为它是在生产级别运行,我不能为调试做微小的改变,我也试图测试使用apache bench ab与100个并行请求,但没有崩溃。

我搜索了相同的错误,但一无所获。扫描器对象永远是活的,永远不会被销毁。那么下面的堆栈跟踪是什么意思呢?

backtrace:#0  0x000000000040909c in Scanner::stopScanner (this=0x0) at ../src/scanner.cpp:118
No locals.
#1  0x00000000004146b2 in RequestHandler::disconnected (this=0x9ac1c0) at ../src/requesthandler.cpp:100
No locals.
#2  0x0000000000417721 in RequestHandler::qt_static_metacall (_o=0x9ac1c0, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7fff7fffe300) at moc_requesthandler.cpp:83
        _t = 0x9ac1c0
#3  0x00007ffff396f01a in QMetaObject::activate(QObject*, int, int, void**) () from /root/libs/libQt5Core.so.5
No symbol table info available.
#4  0x000000000041732f in HTTPRequest::disconnected (this=0x7fff6c00c8d0) at moc_httprequest.cpp:203
No locals.
#5  0x00000000004119ce in HTTPRequest::tcpdisconnected (this=0x7fff6c00c8d0) at ../src/qfoobar/httpserver/httprequest.cpp:183
No locals.
#6  0x0000000000416dce in HTTPRequest::qt_static_metacall (_o=0x7fff6c00c8d0, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x7fff7fffe500) at moc_httprequest.cpp:126
        _t = 0x7fff6c00c8d0
#7  0x00007ffff396f01a in QMetaObject::activate(QObject*, int, int, void**) () from /root/libs/libQt5Core.so.5
No symbol table info available.
#8  0x00007ffff42fcaa8 in QAbstractSocket::disconnectFromHost() () from /root/libs/libQt5Network.so.5
No symbol table info available.
#9  0x00007ffff42fb439 in ?? () from /root/libs/libQt5Network.so.5
No symbol table info available.
#10 0x00007ffff42fb8cc in ?? () from /root/libs/libQt5Network.so.5
No symbol table info available.
#11 0x00007ffff430520f in ?? () from /root/libs/libQt5Network.so.5
No symbol table info available.
#12 0x00007ffff746d2b4 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /root/libs/libQt5Widgets.so.5
No symbol table info available.
#13 0x00007ffff7470c86 in QApplication::notify(QObject*, QEvent*) () from /root/libs/libQt5Widgets.so.5
No symbol table info available.
#14 0x00007ffff393ce24 in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /root/libs/libQt5Core.so.5
No symbol table info available.
#15 0x00007ffff3996bc2 in ?? () from /root/libs/libQt5Core.so.5
No symbol table info available.
#16 0x00007ffff1ed6e04 in g_main_context_dispatch () from /root/libs/libglib-2.0.so.0
No symbol table info available.
#17 0x00007ffff1ed7048 in ?? () from /root/libs/libglib-2.0.so.0
No symbol table info available.
#18 0x00007ffff1ed70ec in g_main_context_iteration () from /root/libs/libglib-2.0.so.0
No symbol table info available.
#19 0x00007ffff39975e4 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /root/libs/libQt5Core.so.5
No symbol table info available.
#20 0x00007ffff393b04b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /root/libs/libQt5Core.so.5
No symbol table info available.
#21 0x00007ffff370277a in QThread::exec() () from /root/libs/libQt5Core.so.5
No symbol table info available.
#22 0x0000000000414a52 in HTTPRequestHandler::run (this=0x9ac1c0) at ../src/qfoobar/httpserver/httprequesthandler.cpp:30
No locals.
#23 0x00007ffff3708434 in ?? () from /root/libs/libQt5Core.so.5
No symbol table info available.
#24 0x00007ffff23ef182 in start_thread () from /root/libs/libpthread.so.0
No symbol table info available.
#25 0x00007ffff2e0847d in clone () from /root/libs/libc.so.6
No symbol table info available.

问题来了:

Scanner::stopScanner (this=0x0)

所以你的stopScanner方法是用非对象调用的。就在下面,你可以看到RequestHandler::disconnected (this=0x9ac1c0),所以似乎disconnected方法正在调用stopScanner与一个空的Scanner指针。