2008-10-02 71 views
4

最近遇到這個問題......在VS.Net 2005中調試應用程序時,斷點沒有連接。錯誤表示編譯後的代碼與正在運行的版本不同,因此導致斷點斷開的不匹配。在VS.Net 2005中進行調試時沒有關聯斷點

清除所有bin文件的解決方案並重新編譯並沒有幫助。不僅僅發生在一個盒子或人身上。

添加備註: 此解決方案位於TFS中用於源代碼管理。如果我刪除我的本地TFS存儲庫並從頭開始從源代碼控制中獲取它,有時候問題就會消失。我也嘗試卸載並重新安裝Visual Studio。這也是有時幫助。這一事實表明,這些問題並非直接造成的。

回答

8

也許這個建議可能有所幫助:

  1. 在Visual Studio中調試時,單擊調試> Windows>模塊。 IDE將停靠一個「模塊」窗口,顯示已爲您的項目加載的所有模塊。
  2. 查找您的項目的DLL,並檢查它的符號狀態。
  3. 如果它說符號加載,那麼你是金。如果它表示無法找到或打開PDB文件,請右鍵單擊模塊,選擇Load Symbols,然後瀏覽到PDB的路徑。

我發現它有時需要:

  1. 停止調試
  2. 關閉IDE
  3. 關閉宿主應用程序
  4. 核武器的OBJ和bin文件夾
  5. 重啓IDE
  6. 重建項目
  7. 再次通過「模塊」窗口
  8. 一旦您瀏覽到PDB文件的位置,符號狀態應該更改爲符號加載,您現在應該能夠在代碼中的行中設置和捕獲斷點。

來源:The breakpoint will not currently be hit. No symbols have been loaded for this document.

+0

很高興聽到它的工作! – 2008-10-07 14:30:14

1

在選項 - >調試中,您可以取消選中「要求源文件完全匹配原始版本」,這可能有所幫助。

+0

難道,在MS的遺志,並沒有幫助。 – ScottCher 2008-10-02 15:56:58

1

構建配置是否設置爲Release?

你有沒有設置斷點的外部DLL的引用?

+0

它設置爲DEBUG,並且沒有外部DLL - 它們都是本地項目。 – ScottCher 2008-10-02 15:57:30

0

AviewAnew - 已經在MS技術人員的要求下完成了這項工作。它無法取消選中要求源文件以匹配版本。

Mike L - 配置設置爲DEBUG,現在有外部DLL。使用除框架引用外的所有本地項目。

0

確定.pdb文件與您正在運行的可執行文件位於相同的文件夾中嗎?確保兩個文件的最後修改日期匹配,並且該VS附加到該exe文件(並且沒有其他文件)。

+0

他們在同一個文件夾中。 – ScottCher 2008-10-02 16:24:53

1

您是否正在創建外部可執行文件使用的DLL項目?你使用.NET還是COM?

如果您使用COM Interop和.NET,DLL版本有時可能是可執行文件加載DLL時的問題。例如,如果您的日常構建會生成一個遞增的內部版本號,但您的調試DLL的內部版本號較小,則該可執行文件將不會加載該調試DLL。要解決此問題,您需要掃描註冊表中的HKEY_CLASSES_ROOT \ CLSID目錄以獲取.NET/COM組件的GUID/CLSID。在InProc32下,刪除版本號比調試DLL更高的條目。

同樣,以上僅適用於.NET + COM Interop DLL。

+0

其.Net和我不創建一個外部exe消耗的DLL項目。 – ScottCher 2008-10-02 16:25:26

0

你有一個後期構建步驟,以任何方式觸及你的二進制文件?如果是這樣,這可能會混淆調試器,並使其看起來像您的符號不匹配您的exe/DLL,因爲大小/時間戳不正確。

+0

不,不要發佈構建步驟。 – ScottCher 2008-10-02 16:26:37

0

在過去,我有時發現關閉編譯器優化可以解決'缺少'斷點,因爲優化程序已經(正確)確定代碼沒有被調用,並將它們從編譯版本中刪除。

這聽起來像是一個不同的問題,但可能值得確保在調試模式下關閉優化。 [項目/屬性,生成設置選項卡]

+0

這些斷點絕對應該被打 - 禁用編譯器優化沒有影響。 – ScottCher 2008-10-02 16:27:15

1

我以前有類似的問題。

這是通過關閉Visual Studio並刪除「C:\ WINDOWS \ Microsoft」下項目的臨時ASP.NET生成的程序集文件解決的。NET \ {框架Framework版本} \臨時ASP.NET文件」,重新打開該項目。

閱讀post here和意見來解決它。

+0

這不是一個ASP.Net項目,雖然它確實有webservices(它是一個smartclient應用程序)。但是,斷點不僅在web服務端,而且在exe文件和相關的dll中都會被破壞。 – ScottCher 2008-10-02 16:55:17

0

肯定有對防止代碼沒有調試屬性代碼被調試,如DebuggerHidden或DebuggerStepThrough,在應用程序的任何位置?

+0

沒有,儘管你正在提出一些非常好的建議,但這裏並沒有什麼特別之處。 8) – ScottCher 2008-10-02 17:21:19

0

你可以逐句通過你的代碼到斷點的行而不是運行並等待它的命中?你能通過代碼在所有?

+0

沒有斷點正在工作,就好像代碼已經在RELEASE模式下編譯一樣。 – ScottCher 2008-10-03 17:22:00