2013-10-02 112 views
0

我有一個.net應用程序運行約一個小時後鎖定。我希望對其線程進行驗證,以確定每個狀態的狀態。問題是,在附加一個調試器(MSVC12)後,沒有明顯的方法來獲取可讀的棧跟蹤。應用程序使用外部測試工具啓動,因此我無法在調試器中輕鬆啓動它。MSVC調試符號

我已經創建了目錄c:/ symbols,將_NT_SYMBOL_PATH設置爲Srv * c:\ symbols * http://msdl.microsoft.com/download/symbols,並在工具/選項/調試/符號中勾選「環境變量」和「微軟服務器」都打勾。

pdb與可執行文件存在於同一個目錄中,但是我也使用symstore(即使我仍然在W7上,它與W8 SDK一起出現)存儲在c:/符號中。在c:/ symbols中有一個新創建的子目錄,儘管sym​​store說它找到了一個ID(0000001),然後存儲了0個文件(它也表示有0個錯誤和0個被忽略的文件)。

我得到的堆棧跟蹤往往很短,有些看起來完全相同(空閒線程可能?),例如,

ntdll.dll!0000000076ff137a() Unknown 
KernelBase.dll!000007fefd071a7a() Unknown 
kernel32.dll!0000000076d91559() Unknown 
mscorlib.ni.dll!000007fef171e9e2() Unknown 
mscorlib.ni.dll!000007fef12935f8() Unknown 
0000000008e20298() Unknown 
mscorlib.ni.dll!000007fef12935f8() Unknown 
00000000572fd470() Unknown 

非常感謝提前。

回答

1

第一個問題是你有一個非託管的調試器連接。從Tools + Attach to Process選擇進程,不要忘記選擇所需的調試器類型。點擊選擇按鈕,如果需要,你想要「管理」打勾。

你的符號有問題,它應該從符號服務器下載ntdll.dll等的符號。很難從提供的信息中進行診斷,您當然不應該使用「symstore」或者必須設置_NT_SYMBOL_PATH環境變量,勾選「Microsoft servers」複選框就足夠了。請確保可以訪問c:\ symbols目錄,並在c:\ users主目錄中支持一條路徑以確保安全。您可以從Debug + Windows +模塊窗口獲得額外的診斷信息。用鼠標右鍵單擊一個條目並選擇符號加載信息。

+0

非常感謝!恐怕我根本不知道可以從MSVC中(而不是從任務管理器)附加調試器。我猜這裏必須有一本手冊:-(在我告訴它禁用「只是我的代碼」選項後,它會加載符號。 –