【发布时间】:2010-07-19 15:19:47
【问题描述】:
我在使用 GDB 调试多线程进程时遇到了一些问题。我有一个多线程进程,它分裂成几个(8 个或 9 个)不同的线程,我试图确定当调用 XML_File_Data 类的构造函数时变量的内容是什么。但是,我遇到了一个问题,在我将正确的函数断点应用于所有线程并且很明显线程的断点之一被命中(程序暂时停止执行)之后,我无法确定哪个线程击中断点。命令
(gdb) thread apply all where
在表单中给了我令人震惊的无用信息:
#0 0x004ab410 in __kernel_vsyscall ()
#1 0x05268996 in nanosleep () from /lib/libc.so.6
#2 0x052a215c in usleep () from /lib/libc.so.6
#3 0x082ee313 in frame_clock_frame_end (clock=0xb4bfd2f8)
at frame_clock.c:143
#4 0x003a349a in ?? ()
#5 0x00b5cfde in thread_proxy ()
from /cets_development_libraries/install/lib/libboost_thread-gcc41-mt-1_38.so.1.38.0
#6 0x02c1f5ab in start_thread () from /lib/libpthread.so.0
#7 0x052a8cfe in clone () from /lib/libc.so.6
在这 9 个进程中,大约 7 个进程几乎给了我那个输出,而关于最后 2 个进程的信息并没有多大帮助(调用堆栈下方的函数具有可识别的名称,但任何最近的 #0- #4 函数无法识别)。
这是我目前所拥有的:
(gdb) gdb
(gdb) gdb attach <processid>
(gdb) thread apply all 'XML_File_Data::XML_File_Data()'
和(断点命中后)
(gdb) thread apply all where
任何有经验的调试器可以给我一些关于我做错了什么或在这种情况下通常会做什么的提示吗?
干杯, 查理
编辑:幸运的是,除了没有在可执行文件的目录中运行调试器之外,我还发现 ?? 的原因是优化代码正在通过调试器运行。但是调试仍然没有多大成功。
【问题讨论】:
标签: gdb