2009-06-08 20 views
26

我試圖更多地使用windbg,並且我一直遇到符號緩存問題。我不清楚字符串的格式應該是什麼。_NT_SYMBOL_PATH格式

我有幾個要求:

\\ foo \ Build1234分佈式構建中的符號存檔未組織爲符號服務器。如果我理解正確,我需要使用緩存關鍵字。

考慮到這些要求,這是否看起來像一個正確格式化srvpath:

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols 

編輯:

我剛開始讀高級Windows調試和我誤解緩存的關鍵字是如何工作的。我認爲這是告訴調試器該文件夾只是文件夾而不是符號服務器的一種方式。在邁克爾離開他的評論之後,我重新閱讀了該部分,並且看到邁克爾所描述的那樣確實有效。

現在我很困惑,當你使用一個;或*來分隔路徑/ URL。而當你需要srv *前綴時。在WinDbg中的在線幫助他們舉這個例子:

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached 

從\\ someshare的符號不會被緩存,從微軟符號c的緩存:\ MYSYMBOLS和c:\ MYSYMBOLS用作緩存緩存*指令右側的任何其他路徑。

偶爾使用srv *會讓我感到困惑 - 我不明白爲什麼第一個和最後一個路徑沒有用srv *作爲前綴。

編輯2:

這是慢慢開始道理給我。 srv指令用於符號服務器,不用於普通的符號目錄。所以,我相信答案我原來的問題是這樣的:

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols 
+1

相關:[如何設置符號在WinDbg中](https://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) – 2017-05-30 21:44:36

回答

33
SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

應該可以正常工作,如果\\foo\build1234只是平PDB的。這裏不需要緩存;你只需要將目錄添加到你的符號路徑。

緩存關鍵字指定要緩存你的符號文件,並且是有用的緩存符號局部非索引股(如\\foo\build1234

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

上述路徑將存儲符號從MS的符號服務器並將符號共享到C:\ dev \ symbols中的本地計算機。

要使用的WinDbg調試符號的問題,做

!sym noisy 
.reload <some exe or DLL in your session> 

,然後做一些行動,將迫使PDB被加載。您會看到windbg正在查找文件的位置,以及是否拒絕PDB爲什麼要這樣做。

!sym quiet 

然後將禁止符號提示。

+0

具有當符號問題,在打開嘈雜的負載之後,我總是使用「.reload -f -a」。 – LanceSc 2009-06-08 22:56:58