2013-01-24 30 views
3
  • 第1步:我建立myProgram.exe併產生myProgram.pdb在它旁邊。
  • 第2步:我故意在myProgram.exe中導致崩潰。
  • 步驟3:有人問我,如果我想使用Visual Studio作爲調試器,和我做。
  • 步驟4:Visual Studio從myProgram.pdb中加載符號。
  • 第5步:我檢查調用堆棧以確定崩潰發生的地點(已知)。
  • 第6步:我不皺眉或看起來很困惑,因爲這是應該的。

但是,如果我重命名myProgram.exe和myProgram.pdb到SomethingElse.exe和SomethingElse.pdb並重復這些步驟,結果是從步驟4起混合。據我所知,在我的生成機器上,VS將始終從重命名的PDB文件中成功加載符號。但是,在我的遠程目標機上,VS永遠不會加載符號 - 它總是告訴我PDB文件與可執行文件不匹配。爲什麼不?我打破了一個晦澀的規則嗎?在任何情況下,我都在運行Visual Studio 2005。是什麼導致符號不能從PDB文件加載?

+0

我剛纔測試了這另一個「遠程」機器上(在我的辦公室),其上不會發生這種情況。顯然,對於實際的遠程機器來說,有一些特定的東西......它沒有聯網,除了生產時間以外難以訪問。所以我想我是在提示可能會導致對這些文件進行簡單名稱更改以使其PDB無法使用的技巧之後。如果新版本出現問題,工作人員將恢復爲已重命名的可執行文件...並且我失去了符號支持,因此很難追蹤那裏的問題。它只是變得非常惱人的:-( – omatai

+0

這可能是一個愚蠢的問題,但你爲什麼不更改程序集名稱,而不是事後更改文件名嗎?無論如何,這是一個奇怪的行爲。 –

+0

我重命名文件,當我創建一個新的版本 - 我保存一份副本作爲「myProgram [date] .exe」,以防我需要恢復它。但是最近,由於未處理的異常,工作人員已經恢復到這些重命名的文件。這個奇怪的行爲 – omatai

回答

2

這裏被打破簡單的微妙的規則是,PDB文件名稱似乎被編碼成EXE文件,而不是從EXE文件名的。因此,例如,如果通過在Windows資源管理器中進行簡單的複製並粘貼來創建「Copy of myProgram.exe」和「Copy of myProgram.pdb」,則可能會出現儘管名稱已更改但正在加載符號的情況。但是,只有原始的「myProgram.pdb」文件也存在時,這隻會起作用 - 如果刪除「myProgram.pdb」並且只有「Copy of myProgram.pdb」,則這些符號可能是兼容的,但Visual Studio不會甚至嘗試加載它們。

在我辦公室的遠程機器上進行的快速而髒的測試中,所有更改的都是文件名,而不是文件版本,而在實際的遠程機器上,名稱和文件版本都不同,所以它是不可能的事情似乎工作。

+0

我有一個PDB文件不可用,即使程序集和PDB文件的名稱和位置都與build相同的情況,但它們被移動到另一臺機器上,但所有文件位置都是與開發機器上的一樣,但Visual Studio不考慮PDB文件來匹配程序集。 – cheeesus

相關問題