我遇到了一些使用GDB調試多線程過程的問題。我有一個多線程進程,分裂成幾個(8或9)不同的線程,我試圖確定當調用一個名爲XML_File_Data的類的構造函數時,變量的內容是什麼。但是,我遇到了一個問題,在將正確的函數斷點應用於所有線程之後,顯然線程的某個斷點正在被觸發(程序暫時停止執行)後,我無法確定哪個線程打到了斷點。命令確定在GDB中調試的正確線程
(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 ISN的信息沒有什麼更多的幫助(遠離調用堆棧的函數具有可識別的名稱,但是最近的#0-#4函數是不可識別的)。
這是我到目前爲止有:
(gdb) gdb
(gdb) gdb attach <processid>
(gdb) thread apply all 'XML_File_Data::XML_File_Data()'
和(斷點命中後)
(gdb) thread apply all where
可以在任何有經驗的調試器給我什麼我做錯了或者是什麼的一些提示通常在這種情況下完成?
乾杯, 查理
編輯:幸運的是,我能找到的??的原因進行了優化的代碼正在通過調試運行,除了不能運行在目錄中的調試器的可執行文件。儘管如此,調試仍然沒有太大的成功。