2016-04-13 36 views
0

我試圖在Visual Studio中調試w3wp進程的'release'部署中的轉儲文件。如何在Visual Studio中調試「釋放」轉儲?

當我嘗試進入代碼時,它說'PDB與圖像不匹配',即使它在過去工作(我在我的機器上重建了確切的提交併指向那些生成的PDB)。

任何線索我如何調試此轉儲/確保我可以調試未來的轉儲?

感謝

+0

PDB是每個版本的,所以如果你想調試舊的版本,你需要使用PDB服務器或類似的東西來保持PDB。也就是說,託管代碼具有足夠的元數據,您可以在沒有PDB的情況下調試很多場景,但您必須爲SOS使用WinDbg。 –

回答

0

不能普遍使用不同的構建產生PDBS,即使源代碼是相同的 - 調試放置一個GUID和年齡(計數器),其得到改變每一個版本。在調試器嘗試使用pdb之前,這兩個值必須匹配。

話雖如此,你可以試着用chkmatch來強制這樣做。如果你幸運的話,你的新版本會有足夠的佈局來發布。爲了確保構建環境儘可能相似 - 包括源代碼位置(源文件絕對路徑的長度可能影響二進制文件中的內部佈局)。

如果您在原始版本中沒有調試信息,那麼將無法工作。

爲了確保您將來沒有這些問題,請始終使用調試信息構建發行版,然後保存這些發佈版本的pdbs。

編輯:

對於C#項目,PDBS在項目屬性進行控制 - >構建 - >高級構建設置 - >調試信息。在發佈版本上將其設置爲「僅限pdb」,在調試時將其設置爲「全部」(應爲默認值)。僅限Pdb不會影響發佈版本的性能。

如果您控制部署環境,可以使用發行版二進制文件部署pdbs - 可以提高轉儲(不確定)。

如果您將二進制文件提供給最終用戶,如果您想限制逆向工程,通常最好自己保留pdbs。

如果有任何情況下保留它們,只要你關心你的二進制文件的特定版本。

+0

感謝您的詳細回覆,我如何使用調試信息構建發佈版本?另外,如果我將它們上傳到我的生產服務器,它是否會導致任何性能開銷? – Ron

+0

嘿,顯然PDB正在被MSBuild包裝發佈的文件剝離。我們修改了構建並部署了一個新版本 - 希望下一次轉儲可以調試。謝謝! – Ron

相關問題