這真的讓我發瘋。我使用WinDbg作爲我的主調試器。 它用於調試本地服務(本地運行WinDbg,在同一臺機器上調試服務)。 PDB文件存儲在本地硬盤上。 源代碼通過SMB共享訪問。WinDbg在調試本地進程時速度慢(step over)
調試工作在突發狀態,有時它流動良好,大部分時間我總是看到令人難以置信的惱人的「* BUSY *」消息,幾乎每次我執行「跳過」時都會發生這種情況。
任何想法,我可以做什麼來加快速度?
感謝
這真的讓我發瘋。我使用WinDbg作爲我的主調試器。 它用於調試本地服務(本地運行WinDbg,在同一臺機器上調試服務)。 PDB文件存儲在本地硬盤上。 源代碼通過SMB共享訪問。WinDbg在調試本地進程時速度慢(step over)
調試工作在突發狀態,有時它流動良好,大部分時間我總是看到令人難以置信的惱人的「* BUSY *」消息,幾乎每次我執行「跳過」時都會發生這種情況。
任何想法,我可以做什麼來加快速度?
感謝
這通常發生在我身上時,多個工具窗口(當地人,手錶,調用堆棧)被打開。如果這些窗口打開,WinDbg將花費週期在每個「逐步」命令上使用慢速符號查找來更新所有這些窗口。
在這方面只使用命令行(ntsd)調試器要快得多。
如果它正在慢慢從互聯網上拖動Windows符號文件,請考慮將它們全部下載到您的硬盤驅動器並將WinDbg指向它們的位置。最好在本地驅動器上安裝服務的符號文件和源文件。
如果您有許多跟蹤保存在工作區中的模塊加載事件(通過bu創建)的非限定斷點,可能會發生這種情況。
也值得去檢查網絡連接和本地符號高速緩存大小
幾件事情嘗試:
代替使用「步驟-上方」的,設置一個斷點上的下一個命令,或甚至硬件斷點(使用BA)
我有完全相同的問題,並通過調整符號選項可以看到一個很大的改進。具體來說,SYMOPT_NO_PUBLICS選項似乎是最重要的,但我調整了一些其他相關選項。我做了以下...
.symopt,爲0x4 .symopt + 0x100的 .symopt +爲0x8000 .symopt-0x10000的
...這就是:
-SYMOPT_DEFERRED_LOADS + SYMOPT_NO_UNQUALIFIED_LOADS + SYMOPT_NO_PUBLICS -SYMOPT_AUTO_PUBLICS
畢竟是,我有一個0x80028333位symopt掩碼值,這是我現在作爲一個WinDbg的命令行選項一起使用,如:
WINDBG.EXE -sflags 0x80028333
我還沒有發現,如果有任何缺點這種方法。也許在某些情況下,使用SYMOPT_NO_PUBLICS會導致信息丟失,但迄今爲止它對我來說運行良好,而且速度肯定會更快。
當你的符號路徑中含有大量文件存儲,WinDbg中可能需要較長的時間來搜索不存在的符號。通過運行Process Monitor並觀察WinDbg所做的文件操作,您可以通過建議用戶eran來診斷此行爲。
這是我們組織的一個極端的痛點,但我發現在這個問題詳細的解決方法:「WinDbg takes extremely long time to loading symbols; is searching every directory in large network UNC symbol store」
我不知道,但我會使用進程監視器,看看是否WinDbg的是忙着做一些IO在凍結時工作。如果是這樣,那可能是問題根源的一個很好的暗示。另外,如果您從Microsoft的服務器獲得PBD,請嘗試禁用它。如果由於某些原因,WinDbg無法在本地保存PBD,那麼它可能會每次都訪問服務器。 – eran
檢查您是否有過多數量的BP同時活動;另外,啓用符號的嘈雜模式來檢查您是否實際上只引用了本地符號 – deemok
您是否設置了符號路徑環境變量?如果是的話WinDbg會使用它。從微軟獲得PDB可能會大大減慢速度。 –