我正在Visual Studio社區2013下開發C++。它是不是UWP的C++/Win32項目,它是作爲Debug/x64平臺運行的。爲什麼不是用於緩存ntdll.dll的pdb
我的配置是:
Tools -> Options -> Debugging -> Symbols -> All module, unless excluded
Tools -> Options -> Debugging -> Symbols -> Cache symbol in this directory
緩存符號目錄包含一堆*.pdb
文件,這是從來沒有碰到。
問題: 當我運行調試器偶爾,我得到消息,有關與MS符號服務器下載ntdll.dll
的,哪些是我猜的系統,因爲我不承認他們爲我的項目的一部分相關的一些其他文件。
爲什麼要下載ntdll.dll
? This文章說:
符號不加載的一些常見原因包括:
- 符號路徑不指向正確的位置
- 符號文件是從一個不同版本的模塊比在過程中加載的 - Visual Studio要求符號文件來自與模塊完全相同的內部版本。它不能加載來自不同的生成,即使源代碼是相同的
我還沒有重建ntdll.dll
符號,我怎麼可能?這是不可能的,因爲它是Windows內核的一部分,所以爲什麼要一次又一次地下載調試符號而不是緩存呢?
編輯:
當我運行調試(F5),然後Debug -> Windows -> Output
下,我看到下面一行:
Debug -> Windows -> Modules
的
'MyProject.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Loading disabled by Include/Exclude setting.
:
ntdll.dll C:\Windows\System32\ntdll.dll N/A No Loading disabled by Include/Exclude setting. 2 10.0.14393.447 (rs1_release_inmarket.161102-0100) 11/2/2016 11:13 AM 00007FFFDF410000-00007FFFDF5E1000 [12772] MyProject.exe
正如我所說的它發生偶爾我不知道我能如何重現這一點。似乎在過去它的工作時間,並不再從MS服務器上下載ntdll.dll
。我無法將x64更改爲x86,因爲我們的項目不能在x86上運行。
我C:\Users\wakatana\AppData\Local\Temp\SymbolCache
包含下列文件夾/文件(我想一個可能是86,另一個是64位,但我不知道):
ntdll.pdb\41C94DD545BD4FCBA2E8F404185B97DC1\ntdll.pdb
ntdll.pdb\77A5329C3B1E425FAA9519DA285D8DA71\ntdll.pdb
是否可以明確地告訴VS使用已緩存的版本ntdll.dll
在C:\Users\wakatana\AppData\Local\Temp\SymbolCache
所有新項目或什麼是默認的VS行爲?
我的操作系統是Windows10家的最新更新
我剛剛禁用了符號服務器,並接受有關缺少pdb文件的警告。雖然我想看到解決這個問題的答案。 – drescherjm
你必須更好地記錄你的問題。隨着調試器的連接,使用調試> Windows>模塊。右鍵單擊列表中的ntdll.dll並選擇「符號加載信息」。將該框的內容複製/粘貼到您的問題中。並提及你的Windows版本。 –
@WakanTanka,你能告訴我你調試哪個項目類型嗎?每次調試應用程序時,是否真的從符號服務器上下載了這個dll文件?據我所知,它對於某些應用程序(如UWP或其他)的Windows 10家庭版本有一些限制,因此,如果您的應用程序以「無需調試即可開始」執行,請更改調試/發佈平臺目標,如X86/x64安裝的Any CPU,結果如何? –