簡體   English   中英

符號文件未加載用於在 Visual Studio 2012 中調試自定義項目

[英]Symbol file not loading for debugging custom project in Visual Studio 2012

我在 Visual Studio 2012 中有一個大型解決方案,它由可執行文件和類庫項目組成。 在調試應用程序時,沒有命中一個特定類庫項目中的斷點。

我查看了Debug> Windows> Modules窗口以檢查該項目的符號狀態,它顯示“無法找到或打開 PDB 文件”
它還在“用戶代碼”列下顯示“否”
我注意到解決方案中還有其他一些自定義項目在該列中顯示“否”,並且它們的符號也無法加載。 “用戶代碼”下帶有“是”的任何內容似乎都加載了 pdb 沒有問題。 但我不確定這是否相關。

我在 dll 上使用了dumpbin /headers並且 pdb 文件的路徑存在且正確。

該模塊絕對不在符號加載的排除列表中。

我還嘗試右鍵單擊模塊窗口中的條目,選擇“加載符號”並導航到 dll 標頭中給出的路徑。 當我選擇 pdb 時,它說“在此文件夾中找不到匹配的符號文件”

在我刪除這些文件夾和文件、清理解決方案、關閉它並重建整個過程后,我得到了這個。 pdb 肯定是與有問題的 dll 同時構建的。

很明顯,問題是錯誤消息的“無法打開 pdb”部分。

我已經在 2 台計算機上嘗試過這個,並且都表現出相同的行為。

任何人都可以提供有關從這里去哪里的任何建議,也許為什么與 dll 對應的內置 pdb 不會加載它?

我嘗試了一些工具來檢查 pdb 和 dll 是否實際匹配,並且使用chkmatch我可以看到正在運行的 dll 中的 GUID 和 obj 文件夾中的 pdb 不匹配。

所以事實證明,雖然項目 obj 文件夾中的 dll 和 pdb 是匹配的,但實際上被構建后事件復制到應用程序目標文件夾的 dll 是來自先前構建的舊 dll。

構建后事件在該特定項目構建之前運行,或者至少在構建完成之前運行,並且正在從 bin 復制現有的 dll,隨后被繼續構建覆蓋。

我已經通過編輯解決方案的項目依賴項並確保具有構建后事件的項目依賴於未加載的項目來解決該問題,現在 pdb 在調試期間加載。

我只是從啟動項目文件夾中刪除了 bin 和 obj 文件夾並重建了解決方案。

對我來說,我剛剛從 IIS 中刪除了該項目並再次創建它,它工作正常

對我來說,它有助於使用 chkmatch 工具,然后關閉並打開 Visual Studio,進行清理和重建。 現在我的 pdb 也被加載了。 正如 Nanhydrin 指出的那樣,您可以確保它確實如此,從 Debug -> Windows -> Modules - 此視圖只能在調試期間訪問。

我發現我收到消息的項目在構建時正在優化。

我進入項目屬性,編譯選項卡,高級編譯選項...並取消選中Enable Optimizations復選框

取消選擇啟用優化

在我的情況下,引用的 dll 的舊版本在我的 GAC 中。 清除了它,它起作用了。

在我的情況下,在Tools>>Options>>Debugging>>General Enable Just My Code上有一個復選標記。

我取消選中它並且它起作用了。

示例圖像

提醒:將項目放入“調試”配置中...對於像我這樣忘記並感到愚蠢的人。

從解決方案中刪除了項目並將其再次添加到對我有用的解決方案中。 :)

在這里參加派對有點晚了 - 以防萬一這會有所幫助。

我們有幾個單獨的網站(在 Visual Studio 的不同解決方案中)。 在其中一個站點的初始加載時,我們正在調用另一個站點,該站點將返回圖像。

這兩個站點都引用了一個公共 DLL,但是在一個站點上工作時,並沒有意識到另一個站點被保留在“發布”版本中 - 在站點加載后,有問題的 DLL 被重建,但沒有符號。

感謝 Nanhydrin 提到模塊調試窗口(非常有用)和讓我在后期構建事件中走上正軌。

來自另一個對我有用的線程的回答: https : //stackoverflow.com/a/28476665/5969306
- 在 Visual Studio 中:項目屬性 -> 構建 -> 高級按鈕 -> 調試信息下拉菜單並確保該值不是“無”。

我剛剛遇到了這個問題,並認為我會將我的修復程序放在這里,因為它可以幫助其他人(甚至可能是我自己?!)在未來......

確保當您附加到遠程服務器上的進程時,“附加到”設置為

自動確定要調試的代碼類型

為此,當提供了服務器限定符並且進程列表可見時,單擊“附加到”輸入旁邊的“選擇”按鈕。

圖 1 然后,從屏幕中選擇“自動確定要調試的代碼類型”和“確定”,然后附加。

圖 2
這至少為我解決了這個問題。

我的調試窗口中有這樣一行:

未加載模塊“MyModule.dll”的符號。

我刪除了項目屬性 -> 構建中的“優化代碼”選項。 並且錯誤消失了。

此問題可能是由於項目中使用的 dll 引用錯誤所致。

刪除當前項目中的objbin文件夾並重新構建項目。

檢查 ASP.NET 臨時文件夾的權限:

"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"

應用程序池的用戶必須有權訪問包含 ASP.NET 文件的子文件夾,例如:

root\60039743\c28e12ee
  1. 檢查此答案中的選項: https : //stackoverflow.com/a/38377530/6911991
  2. 單擊Advanced並檢查Debugging Information是否設置為 FULL
    高級選項卡截圖
  3. 檢查解決方案中所有項目中的運行配置

我遇到了這個問題,嘗試了所有其他解決方案(花了 2 天!我在哭……!兩天!)但最后我意識到我的文件已在 GAC 中注冊,我將其刪除並解決了問題。

在命令提示符下,鍵入以下命令:

gacutil –u <assembly name>

如何:從全局程序集緩存中刪除程序集

請檢查您的 dll 的依賴關系,如果您添加到解決方案中,這可能會導致加載符號失敗。

我通過在Debug->Options菜單中禁用“Use Managed Compatibility Mode”解決了這個問題:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM