2013-11-15 112 views
3

使用MinGW的GDB 7.6版,得到了很多回溯的是這樣的:GDB Windows?在回溯

(gdb) bt 
#0 0x000000007703d256 in ntdll!RtlEnterCriticalSection() 
    from C:\Windows\SYSTEM32\ntdll.dll 
#1 0x0000000000000000 in ??() 

這不完全是有用的。

這是爲什麼?反正有什麼更有用的嗎?當我發現一個錯誤發生時,試圖找出一個複雜的多線程程序正在做什麼,這是非常痛苦的,當我得到這個這個是我的回溯。

+0

您是否啓用了gdb非停止模式? 這是一個很好的多線程調試與gdb的例子[這裏](http://blogs.adobe.com/flascc/2012/11/09/debugging-multi-threaded-flascc-applications-with-gdb/) – amdixon

+0

這是一個32或64應用程序,同樣適用於操作系統?另外,由於堆棧包含對'ntdll'的調用,所以可以說這是系統調用的一部分。瞭解我對內核調用影響.NET異常的瞭解,如果類似的東西影響回溯,我不會感到驚訝。 –

+0

64位應用程序/ 64位操作系統。 –

回答

0

原因可能是gdb有一個「當前」線程的概念,它是非常隨機選擇的。

您可以通過發出gdb命令info threads來查看您的程序當前正在執行什麼線程。 將「當前」線程切換爲thread <num>。 嘗試再次獲得有意義的回溯。

另外要確保

  • 你的可執行文件與調試信息(-g)編制,
  • 即GDB能夠應付用於編碼調試信息到你的可執行文件格式。您可能想驗證gdb是否可以在`main()'處設置斷點,並且在那裏表現合理。
2

我碰上使用MinGW的64使用的編譯器同樣的問題,切換 -g3 -oG 終於露出所有的回溯很好。