簡體   English   中英

如何補救“當前不會命中斷點。沒有為該文檔加載任何符號。” 警告?

[英]How do I remedy "The breakpoint will not currently be hit. No symbols have been loaded for this document." warning?

一個 C# 桌面應用程序(在 Visual Studio Express 版本上)可以運行,但 5 秒后它就不能運行了。

我嘗試了以下內容:

  • 確保在所有程序集中設置調試配置、調試標志和完整的調試信息。
  • 從我的整台機器上刪除所有與項目相關的bin和obj文件夾以及所有DLL個文件。
  • 從頭開始重新創建導致問題的項目。
  • 重啟。

我在解決方案中有兩個 Windows Forms 項目。 其中一個加載調試信息,一個不加載。 它們都引用了我試圖在項目文件中以完全相同的方式獲取調試信息的程序集。 有任何想法嗎?


我想在這里補充一點,主要是為了我自己,當我回來復習這個問題時,直到加載程序集才加載符號,直到需要時才加載程序集。 如果斷點位於僅在主程序集中的一個 function 中使用的庫中,則在調用 function 之前不會加載符號(並且它將顯示斷點未命中)。

到達斷點或使用Debug > Break All后立即開始調試,使用Debug > Windows > Modules 您將看到加載到進程中的所有程序集的列表。 找到您要為其獲取調試信息的那個。 右鍵單擊它並選擇符號加載信息。 您將看到一個對話框,其中列出了它為程序集查找 .pdb 文件的所有目錄。 根據實際的 .pdb 位置驗證該列表。 確保它沒有找到舊的。

在普通項目中,程序集及其 .pdb 文件應始終由 IDE 復制到與 .exe 相同的文件夾中,即項目的 bin\Debug 文件夾。 如果您一直在使用它,請確保從 GAC 中刪除它。

檢查您是否不在發布中,而是在調試中。

調試時:

首先嘗試通過鼠標右鍵單擊項目> Rebuild來重建您的項目如果這不起作用,請嘗試清理項目(鼠標右鍵單擊項目>清理)

如果這不起作用,請檢查:

  1. 鼠標右鍵單擊您的項目
  2. 選擇[屬性]
  3. 選擇[構建]選項卡
  4. 確保選中[Define DEBUG constant][Define TRACE constant]
  5. 確保未選中[優化代碼]
  6. 點擊 Build 標簽頁底部的[Advanced]按鈕
  7. 確保[Debug Info:]設置為[full]
  8. 單擊[OK] 並重建項目;-)

(第 7 步生成 .pdb 文件,這些是調試符號)

只是一些簡單的嘗試 - 你可能已經嘗試過了。 右鍵單擊解決方案資源管理器中的解決方案,單擊“清理解決方案”,這將刪除與解決方案關聯的所有已編譯和臨時文件

重新構建解決方案並嘗試再次調試。

我也遇到了解決方案中多個項目的斷點問題——一些編譯為 x86,一些編譯為 x64。

在調試/常規設置中禁用“僅我的代碼”選項。

我在類似線程上找到的Hans K交叉發布此修復>> HERE <<

右鍵單擊解決方案->屬性

查看 Common Properties --> Startup Project

選擇多個啟動項目

對需要調試的項目選擇開始操作。

選定的答案使我解決了我的問題。 但我還需要做一些事情:

即使在下拉列表中選擇了“調試”:

在此處輸入圖像描述

在項目屬性>構建中:

在此處輸入圖像描述

Visual Studio 未將符號加載到特定項目。 因此,在該下拉列表中,我選擇了“配置管理器”,發現我的 Web 項目的設置不正確:

在此處輸入圖像描述

在此處輸入圖像描述

然后我將其設置為“調試”並開始生成.pdb文件。 但是我需要手動復制 PDB 和 DLL 並放入 VS 正在查找的文件夾中(這里是所選答案對我有幫助的地方):

在此處輸入圖像描述

有時,即使它給你這個錯誤, Breakpoint仍然會被命中,所以忽略這個錯誤。 這在MVC web appViews中經常發生,即.cshtml

Debug > Windows > Modules看看正在加載哪些模塊,這讓我朝着正確的方向前進。

就我而言,IIS Express 似乎從臨時 ASP.NET 文件加載了不同的 DLL。

解決方案?

  1. 瀏覽到C:\Users\<YOUR USER>\AppData\Local\Temp\Temporary ASP.NET Files\vs
  2. 刪除此目錄中的所有內容!

我可以通過簡單地將“附加到進程”中的選項設置為“自動確定要調試的代碼類型”選項來修復錯誤,如隨附的屏幕截圖所示。

只需按照以下步驟操作:

  • 從菜單欄中轉到調試
  • 單擊附加到進程
  • 附加到選項附近,單擊選擇按鈕
  • 將出現選擇代碼類型窗口
  • 現在選擇選項自動確定要調試的代碼類型,然后單擊確定按鈕。

修復調試錯誤

檢查 bin/Debug 文件夾中是否缺少 .pbd 文件。 如果是,則轉到項目的“屬性”,選擇“構建”,然后在底部選擇“高級”。 在出現的新窗口中選擇“調試信息”下的“完整”。 這是我的問題並為我解決了。

顯示在哪里可以找到設置

在我的情況下,在我的項目屬性中檢查了“優化代碼”。 這導致 VS 將我的程序集視為“不是我的代碼”,反過來,它沒有為它加載符號。

解決方案是取消選中此項。 優化代碼復選框的位置

只需檢查您的解決方案是否處於發布模式。

嘗試在 Windows 中以管理員身份運行 Visual Studio。

就我而言,我正在嘗試在發布模式下進行調試。 一旦我將其更改為調試模式。 它的工作

調試->選項->常規->取消選中“ Enable Just My Code ”標記

這對我有用。

您需要在編譯器設置中啟用“生成調試信息”

我嘗試了上面提到的所有方法,但沒有任何效果。 [清理解決方案,並檢查 PDB 文件等]

即使發布相同的解決方案也無法解決問題。

然后我又回到了我通常做的事情來解決(愚弄這個頑固的 Visual Studio)

我所做的只是故意更改代碼並發布解決方案。 然后我恢復了更改並再次發布。

瞧 [PDB 文件擺脫邪靈].. 不是一個聰明的解決方案,但這確實有效.. :-|

檢查您的Solution Configuration下拉列表。 確保您選擇Debug ,而不是Release

Microsoft Visual Studio Express 2013 版中不存在“開始調試,調試 + Windows + 模塊”選項。

在工具選項調試中取消選中“使用托管兼容模式”可以解決此問題。

我們找到了問題的原因。 此代碼使用 .aspx 文件的 Page 指令中的“CodeBehind”屬性,而不是“CodeFile”屬性(ASP.NET 2.0 及更高版本)。 經過幾天的絕望,一個簡單的搜索和替換解決了這個問題。

僅限 Web 應用程序 (IIS Express):

  • 右鍵單擊 IIS Express 托盤並關閉 IIS。
  • 清潔解決方案

IIS 托盤

  1. 清潔解決方案並重建
  2. 檢查配置是否設置為調試
  3. 確保 PDB 文件位於它自己的 Debug 文件夾中
  4. 從調試菜單中單擊啟用所有斷點

這些答案都沒有解決我的問題。 基於停止的項目實際上不是加載的項目,我嘗試了另一件事。 我發現 Hans Passant 寫道,我想停止調試器的 .dll 和在 .exe 文件附近復制的相關 .pdb 文件。 這些文件的日期較舊,所以我認為它們沒有在運行時更新。 我手動刪除了它們,Visual Studio 創建了另一對並將這對新的一對放在 .exe 附近。 現在斷點起作用了!

也許 Visual Studio 無法復制和替換 .exe 附近的現有文件(.dll 和 .pdb),因為那里還有另一個文件。 因此,如果我手動刪除,那么 VS 可以在 .exe 附近創建新的。

我認為另一個更改(檢查等 - 從另一個答案)觸發了一些東西,Visual Studio 將項目文件夾中的 dll 和 pdb 復制並替換到了 exe 附近的文件夾,所以這是一個解決方案。

我認為問題的根本原因是Visual Studio在運行時使用了另一個文件,沒有來自項目的文件,並且停止了。

也許這個答案可以幫助某人!

檢查以下兩個設置是否在 Visual Studio 中相同:

右鍵單擊測試項目,轉到屬性,構建選項卡,然后查看平台目標

我的都設置為“任何 CPU”,所以x64

在此處輸入圖像描述

在主菜單欄上,轉到測試、測試設置、默認處理器架構

我的設置為X86

在此處輸入圖像描述

將其更改為X64以匹配上述設置使內置的 Visual Studio 菜單“調試測試”工作並命中先前被忽略的斷點,並顯示消息“當前不會命中斷點。 沒有為此文檔加載任何符號”。

更新:

對於Visual Studio 2019 ,菜單進行了一些移動: 在此處輸入圖像描述

而不是只做所有這些事情

關閉並重新打開

它將解決問題的解決方案

我有類似的問題,我做了以下事情:調試=>選項=>常規=>刪除“啟用我的代碼”的復選標記這對我有用..

我也有同樣的問題,我在 x86(或 x64)中重建整個解決方案(包括引用的項目)

即使我從配置管理器(Build->ConfigManager)將我的所有項目都設置為 x86,但我的一些項目並未設置為 x86。

所以只是為了確保右鍵單擊該項目並按照

項目 -> 屬性 -> 調試選項卡,驗證配置和平台。

需要檢查的事情要清楚:確保您將配置設置為“調試”而不是“發布”。 您可以在“發布”模式下調試啟動項目,但不能調試引用的類庫。

項目屬性(然后選擇您的構建配置)>構建選項卡>高級...>調試信息(下拉)

設置為 'all' 或 'pdb-only' 然后重建

這花了我一段時間嘗試了上面的其他選項,並且由於某種奇怪的原因調試停止工作。

工具 -> 選項 -> 調試 -> 常規 -> (取消勾選)“要求源文件與原始版本完全匹配”選項

我知道我遲到了幾年,但我認為我做錯了什么並按照上述步驟操作然后我意識到我錯誤地將解決方案配置設置為“發布”:)

我已經仔細閱讀了上面所有的答案,但沒有一個能解決我的問題。

就我而言,我正在編譯一個類庫 (DLL)。 Debug -> Modules 中似乎沒有加載任何模塊,所以我什至無法手動加載符號。

我的解決方案是將此行添加到我的代碼中:

System.Diagnostics.Debugger.Launch();

到達此代碼后,將觸發異常,並且 .NET Framework 會顯示一個對話框,詢問您要使用哪個 Visual Studio(即 VS 2008 的新實例、VS 2013 的新實例等)來調試程序。 您可以在加載項目的情況下選擇現有的 VS 實例。 這會將進程附加到您的 VS 會話並加載所有符號,現在您可以調試您的項目。

當然,編譯必須使用 Debug 配置完成,而不是 Release。

  1. 通過在下拉菜單中選擇debug ,確保您處於Debug狀態而不是release狀態,如下圖所示。

在此處輸入圖像描述

  1. 然后,嘗試通過在解決方案資源管理器窗口中的解決方案上單擊鼠標右鍵並選擇Clean solution來清理您的項目。

在此處輸入圖像描述

  1. 然后通過在解決方案資源管理器窗口中的解決方案上單擊鼠標右鍵並選擇Rebuild solution來重建您的解決方案

在此處輸入圖像描述

右鍵單擊 Project -> Properties -> Go to Build Tab -> 取消選中Optimize Code 為您解決方案中的任何項目執行此操作

在嘗試了一堆這些之后,最終對我有用的是:

Debug > Options > General中,取消選中Enable Edit and Continue

我已經與這個問題作斗爭了將近一個小時。 然后我發現我愚蠢地錯誤地鏈接了一個“發布”靜態庫而不是那個庫的“調試”版本。 我的設置是帶有“CMake”項目的 VS2019,我正在做一個 C++/VulkanAPI 項目。 您的項目的設置可能完全不同,但問題可能仍然存在。

我知道已經有將近 30 個答案,但我只是想在這里分享我的經驗,所以“也許”有人可能會忘記將發布庫更改為調試庫。

我正在使用 VS10 將 C# 應用程序與靜態庫集成 - 我是新手。 我編寫了一個托管代碼 dll 來接口它們。 除了靜態庫,我可以在任何地方設置斷點。 我收到了上述消息 - 沒有為此文檔加載任何符號。 我嘗試了上面的許多建議。 我可以看到符號沒有被加載。 我終於注意到一個復選框配置調試,啟用非托管代碼調試。 這讓我可以在靜態庫函數中設置斷點。

對於 ASP.Net 應用程序,檢查站點的屬性,ASP.NET 選項卡。 確保選擇了正確的 ASP.NET 版本。

這發生在我將另一個 webservice asmx 文件復制粘貼到現有 webservice 后,在嘗試調試最近添加的服務時導致相同的錯誤,為了能夠調試,我必須在不調試的情況下啟動,然后附加到進程。 它很奇怪,但它是我發現能夠調試的唯一方法。

如果我們從 VSTS 獲取最新版本,所有文件都將處於只讀模式。 在運行項目時,所有類庫類都是只讀的,並且斷點變為空並說“斷點當前不會被擊中。沒有為此文檔加載符號”。

解決方案 1

轉到項目位置並右鍵單擊文件夾--->屬性--->常規選項卡--->取消選中只讀(僅適用於文件夾中的文件)--->應用--->確定

解決方案 2

開始調試,轉到調試---> Windows ---> 模塊。選擇一個程序集並右鍵單擊--->(選擇)符號設置。 在此目錄中的緩存符號中設置您的 Bin 路徑,然后在 PDB 位置的符號中選擇 Microsoft 服務器。 單擊加載所有符號。 這需要一些時間。然后單擊“確定”。

現在所有程序集的符號狀態已從“找不到或無法打開 PDB”更改為“已加載符號”。

我嘗試了所有這些,但無法讓我的斷點工作......

我為解決這個問題所做的是

在我的斷點未命中的頁面中,我選擇了文件夾>添加現有項目,然后從其保存路徑中選擇頁面。 這允許斷點開始工作。

[ WINCE ] 我在 WinCE 上構建期間碰巧遇到了這個問題,似乎“清理”沒有清理設備上的目標文件夾,我通過更改設備上的輸出文件夾(項目屬性->設備選項卡->將輸出文件夾更改為先前失敗的調試以外的文件夾)-瞧! 有用。 可能需要在設備上進行手動清理,但這將在以后進行。

希望這有幫助。

如果您發現必須以特定順序在解決方案中單獨構建項目才能構建解決方案,因為在清理后直接構建解決方案不起作用,然后您會發現問題中描述的問題,這可能是由於包含了一些額外的項目,這些項目引用了不正確的相對路徑,因為它們已從不同的位置添加到您的解決方案中。 因此,相對路徑與位於 .sln 文件下的文件夾中的 .csproj 文件的位置不同。

它會以特定順序逐個構建項目的原因是因為其他項目引用相同的庫,然后構建到 GAC。 解決方案最終構建,但它加載的符號來自 GAC,這些符號可能會過時。

解決方案是重新構建解決方案和項目的物理文件夾結構,或者單獨打開 .csproj 文件並修復相對路徑,以便對任何給定庫的所有引用最終指向所有項目中的相同位置。 或者也許使用$(SolutionDir)令牌。

如果所有其他方法仍然失敗,那么您需要強制 Visual Studio 重置您的構建配置,這需要您取消選中所有項目的所有構建配置,然后重新檢查它們 - 請參閱此處的解決方案。

對我來說,問題只是我試圖在一個未設置為啟動項目的 Web 項目中進行調試。 所以在運行調試時編譯得不好,.pdb 不是最新的。

只需將項目設置為“設置為啟動項目”就可以了。

希望這可以幫助

我有同樣的問題,我嘗試了一切可能的......其中一些是

1) 在 bin 和 obj 文件夾中的臨時 ASP.NET 文件夾中對臨時文件進行核對。

2)取消選中優化代碼並啟用我的代碼

3) 導航並嘗試從模塊窗口手動加載符號。

4) 檢查解決方案屬性中的構建標志。 ...........

清單還在繼續……我花了一天的時間,但最終對我有用的是……我知道我的項目的符號沒有被加載,我看不到任何帶有我的項目名稱的模塊模塊窗口...

所以問題是我的符號是從項目的虛擬目錄路徑中帶來的......並且它被映射到其他項目的虛擬目錄......應該在模塊中加載的Web項目不存在以下是我遵循的步驟..

  • 右鍵單擊特定的 Web 項目並選擇屬性
  • 轉到 Web 選項卡
  • 您可以看到創建虛擬目錄按鈕
  • 當我點擊它時,我看到一條警告消息說“(項目名稱)已映射到(另一個項目名稱)”你確定要重新映射嗎? 像這樣的東西
  • 那么為什么我在模塊窗口中看到不必要的項目名稱是有道理的
  • 然后我重建了解決方案並能夠達到斷點

我得到了這個並且被難住了(使用 Visual Studio 2013 Premium)。

通常,我們工作中的應用程序會引用特定 common/app 目錄中的 .dll,例如:C:\OurCompanyApps\xxxxxx.dll。 這發生在一個包含一堆 WinForm 和 .dll 項目的解決方案中。 .dll 項目編譯到 C:\OurCompanyApps\,WinForm 項目引用該位置中已編譯的 .dll 文件。

問題:我發現有問題的應用程序引用了源代碼管理 bin\Debug 位置中的 .dll 項目,而不是 C:\OurCompanyApps 中的已編譯 .dll 文件。

解決方案:我刪除了引用並從 C:\OurCompanyApps\ 位置重新添加了它。 然后我可以單步執行我在 .dll 代碼中添加的斷點。

希望這可以幫助某人。

如果您同時擁有 C# 和本機代碼 (C/C++),請確保為項目啟用本機調試:
1. 在解決方案資源管理器中右鍵單擊您的啟動項目
2.選擇屬性
3.選擇“調試”選項卡
4.確保啟用本機代碼調試必須選中“啟用本機代碼調試”才能調試您的本機代碼

嘗試這樣做。 它對我有用。

Debug=>Options=>General => 去掉“Enable Just My Code”的復選標記

我認為如果這個錯誤的來源是,調試符號在構建發布后很難出現在解決方案中。

我嘗試了所有其他答案——通常,重新生成 .pdb 符號或檢查它們的位置,清理和重建項目,確保活動配置不是 Release 等。

最終對我有用的是右鍵單擊解決方案資源管理器中的項目 > 調試 > 啟動新實例。

以下步驟為我分叉:

  1. 轉到項目的“bin”文件夾。
  2. 刪除“調試”文件夾。
  3. 再次構建您的項目。
  4. Debug 文件夾將被重新創建。

現在您可以再次開始調試。

我這樣解決:運行項目。 轉到,Debug -> Windows -> Modules 選擇要調試的庫並右鍵單擊它。 選擇->“加載符號”,然后將“跳過加載符號”更改為“加載符號”。

我在 Visual Studio 2019 社區和 Asp.net Web 表單項目中遇到了同樣的問題。 我花了 1.5 天,這 30 個答案中的任何一個都解決了我的問題。 最后我運行 Visual Studio 安裝程序 exe 並選擇修復選項。 所以我的配置被重置,問題完全消失了。

如果您發現上述解決方案均無效,請嘗試此操作。

右鍵單擊項目 -> 屬性 -> 構建 -> 高級。 將調試信息從 None 更改為 Pbd-only 或 full

在此處輸入圖像描述

我通過以下方式解決了這個確切的問題:

  1. 以管理員身份打開工作室
  2. 使用 Build->Clean 解決方案
  3. 使用構建->構建

轉到項目的屬性,然后轉到“構建”選項卡。 單擊底部的“高級...”並將調試信息更改為“完整” 在此處輸入圖像描述

在嘗試在 VS 2013 中調試 Excel 插件時,在我通過禁用 DotNet 框架源步進和禁用符號加載嘗試了所有 Debug 設置之后,最終對我有用的是將 Configuration Setting 更改為 Release 而不是 Debug ,因為編譯器似乎越過代碼,斷點最終被擊中。

我瀏覽了所有答案,沒有什么幫助。 就我而言, web.config文件存在問題。 這是<compilation debug="false" strict="true"

我改為

<compilation debug="true" strict="false" 現在我可以調試應用程序了。

在任何其他論壇中沒有找到此內容之后,我想再添加一件事可以通過不加載 .pdb 文件來防止步進/中斷:如果您添加構建后處理以將資源元數據添加到 DLL (公司名稱、版本號等),如“rc.exe my_dll.rc”,這可能會導致 DLL 和 .pdb 文件不匹配。 如果簽名不匹配,它將不會加載文件和調試所需的所有符號。 從調試版本中刪除它。

確保您的代碼不會在鏈接時被拋出。 即使編譯器可能重建對象,如果鏈接器沒有看到對代碼的引用,它也會將其丟棄並在嘗試設置斷點時導致此錯誤。

我個人的情況是調試在最初創建它的 Visual Studio 2013 中工作,但在 2015 年無法工作。我能夠通過將項目文件中的版本更改為版本 12 而不是版本 10 來解決此問題。

就我而言,在AssemblyInfo.cs文件中,有以下行,我對其進行了評論,一切都是正確的:

[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

我最終將我的問題追溯到使用多個 PostSharp 版本的明顯不兼容問題。 我試圖調試的應用程序具有 PostSharp 的早期版本,但引用了一個使用更新版本的項目,出於某種原因,這導致 VS 拒絕專門為該應用程序生成 PDB 文件(所有其他 DLL加載他們的調試符號很好)。

解決方案是將每個項目中的 PostSharp 更新為最新版本並重新編譯。

就我而言,這是因為我的發布配置文件(發布到本地 IIS 站點)以某種方式設置為發布配置,盡管全局構建配置設置為調試。 將發布配置文件修改為調試配置為我解決了這個問題。

在我的情況下,這在 Windows Update 之后開始發生,結果是 Windows 更新關閉了 Internet 信息服務,這使得我的 API 似乎無法達到我設置的斷點,但實際發生的是 IIS無法啟動,因此我的應用程序代碼實際上並未運行。

仔細檢查 Windows 功能菜單中是否啟用了 Internet 信息服務。

IIS 使用說明:

  • 控制面板
  • 程式
  • 打開或關閉窗口功能
  • 勾選互聯網信息服務
  • 重新啟動視覺工作室

如果使用 IIS Express:

從舊控制面板打開“添加/刪除程序”並在 IIS Express 上運行修復 或者您可以轉到控制面板 ->> 程序 ->> 程序和功能 ->> 打開或關閉 Windows 功能 ->> Internet 信息服務並檢查父 Internet 信息服務文件夾。

我在這里得到了這個答案: 指定的參數超出了有效值的范圍。 參數名稱:站點

就我而言,我正在使用 Visual Studio 的實驗實例調試 WPF 擴展。 開始調試然后暫停調試器后,我打開了Debug > Windows > Modules窗口。 在那里,我可以看到 Visual Studio 試圖加載符號C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\15.0_76a9e536Exp\Extensions\<companyName>的目錄。 停止調試后,我使用 Windows 資源管理器刪除了目標文件夾並重新啟動了調試器。 然后,Visual Studio 能夠命中斷點。

就我而言,這些解決方案都不起作用。 我不得不去

工具 -> 導入和導出設置 -> 重置所有設置。

然后調試開始工作,沒有任何問題。

如果您使用的是C++項目或來自C#或任何.Net項目的dll ,並且您想調試到本機代碼。 然后轉到.Net項目屬性 -> 調試 -> 啟用本機代碼調試(將其設置為 true)。

盡管聽起來很愚蠢,但要 101% 確定您引用了正確的類。

在我的情況下,我有一個 GameObject,我在其中向組件添加了錯誤的腳本。 因此,Visual Studio 無法實際訪問代碼。

我只需要刪除錯誤的 C# 腳本和組件並添加正確的。

超輕量級:

如果您正在調試通用 Windows 項目[UWP] ,則該過程類似於混合 C# 和本機代碼的解決方案,除了您需要將應用程序進程或后台任務進程調試器設置為僅托管來調試您的 C# 代碼。

  1. 在解決方案資源管理器中右鍵單擊您的啟動項目
  2. 選擇屬性
  3. 選擇“調試”選項卡
  4. 將進程調試器類型設置為僅托管

在此處輸入圖像描述

左場答案在這里。 我有幾個項目的解決方案,因為它們具有相同的端口號,Visual Studio 啟動了錯誤的項目。 所以,是的,沒有為我的斷點加載調試符號......

我最終得到了一個文件的兩個副本,其中包含相同的類。 兩者都在 Visual Studio 中打開,但它們具有不同的文件名,其中一個實際上包含在項目中,而一個沒有。

確保您設置的斷點位於您的解決方案/項目實際正在編譯的文件中。 未編譯的文件沒有符號。

在發生此錯誤的某些情況下,另一種解決方案是:檢查您的Build Action

我在一個 asp.net MVC3 項目中遇到了這個問題; 我的一個控制器由於某種未知原因將 Build Action 設置為 EntityDeploy 盡管它應該是Compile

我已經完成了干凈和重建的事情。 那沒有用(通常是這樣)。 現在,我在通過服務調用之前附加到 w3wp,然后讓它調用服務一次,命中另一個斷點,然后我更改執行點,以便它再次運行同一行(調用服務),然后它實際上在服務方法內的斷點處停止。

這里沒有一個想法對我有用,但我感謝大家的努力——在我的例子中,它是一個引用類庫項目的 Windows 應用程序——我可以調試 Windows 應用程序,但不能調試類庫。 正在生成 pdb 文件。 然而,我確實發現,如果我調試對類庫的調用,我可以進入類庫。

我在 2013 年啟動 ASP.NET 網站時發生過這種情況。在我的情況下,一旦網絡瀏覽器完全啟動,它就會消失。

嘗試在 sharepoint 項目中調試 silverlight 應用程序時出現問題。 在項目屬性的 sharepoint 選項卡下,您必須明確啟用 silverlight 應用程序的調試。 否則你會得到這個錯誤。

也許您不應該制作AutoPostBack
如果您的代碼沒有進行 PostBack,您可能會收到此錯誤。
問候。

我正在使用 IE8 並嘗試對一些 JavaScript 文件進行更改。 盡管代碼正在執行,但它不會在斷點處停止,並且我在斷點處收到相同的消息。 升級到 IE11 為我解決了這個問題。

在我的情況下,Visual Studio 加載全局程序集緩存 (GAC)中的 DLL,而不是我的項目列表中的 DLL。 我刪除了 GAC 中的 DLL,現在我可以看到斷點正常工作。

為了我:

  • 打開解決方案屬性
  • 選擇“通用屬性”/“調試源文件”
  • 在“不查找這些源文件”窗口中,刪除幾乎可以肯定錯誤地存在的文件。

另一個對我有用的技巧。

如果您的項目/庫已簽名,甚至沒有延遲簽名,它仍然可能無法調試。 嘗試禁用簽名選項,調試它,然后恢復簽名選項。

我的同事遇到了這個問題,遵循了與此處類似的步驟,但解決方案與給出的任何一個都不同。

她要調試的代碼位於當前項目引用的項目中,並且從未在 Visual Studio 會話中運行。 DLL 是從 GAC 文件夾中運行的,在她刪除該項目根本無法運行之后,它一嘗試運行就拋出異常。 解決方案是將引用的項目包含在本地文件夾中。

從解決方案資源管理器:

  1. 選擇您將用完的“調試”項目
  2. 展開參考(如果不可見,選擇菜單項目,項目顯示所有文件
  3. 右鍵單擊具有不工作的斷點的項目,選擇屬性
  4. 將 Copy Local的值從False更改為True

再試一次。 (這對她有用!)

對我來說,另一個解決方案是后期構建無法進入主項目的 bin 文件夾的項目。

Qt .pro 生成的項目也有這個問題。 原來我忘了設置一個環境變量來確定屬性/通用/輸出目錄。 一個微不足道的,一個首先要看的,但有時我們會錯過明顯的東西。

我不小心在文本編輯器中打開了項目文件,它被卸載了。 不太可能,但是如果您遇到困難,請檢查一下。

我意識到這是一個舊線程,但為了其他人的利益,這就是發生在我身上的事情。 問題在於我如何應用 Designer 屬性。 我創建了一個設計師課程。 設計器覆蓋 PrefilterProperties 以使 Anchor、AutoScroll 和 AutoSize 屬性為只讀。

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
public class j2aScrollableContainerDesigner : ParentControlDesigner

我創建了一個類並將我的設計師添加到其中。 這是將設計器屬性附加到類的標准方法,在許多 MSDN 示例中都可以找到。 設計器顯然沒有被使用,因為當我將控件放在窗體設計圖面上時,上面提到的所有屬性都不是只讀屬性網格中的。

[Designer(typeof(j2aScrollableContainerDesigner), typeof(ParentControlDesigner))]
public partial class j2aScrollableContainer : UserControl

出於絕望,我將類上的 Designer 屬性聲明更改為以下簽名,現在調用了設計器。 我無法解釋為什么一種方法有效而另一種方法無效。 如果我恢復到上面的 Designer 屬性聲明,設計師將再次退出工作。

[Designer(typeof(j2aScrollableContainerDesigner))]
public partial class j2aScrollableContainer : UserControl

我的丟失主要是因為我有 2 個項目停在同一個 IISExpress URL,請確保指定不同的端口並點擊 CreateVirtualDirectory。

這可能是由於測試項目、Web 項目或其他執行項目具有對與正在加載的模塊同名的項目的 Nuget 引用。

在解決方案中采用以下示例項目:

  • Vendor.ABC
  • MyLib (參考 Vendor.ABC)
  • MyProg (控制台程序:僅引用 MyLib)
  • MyProg.Web (MVC 項目:參考 MyLib 和解決方案項目 Vendor.ABC)
  • MyLib.Test (測試項目:參考 MyLib 和 Nuget 包 Vendor.ABC)

MyProgMyProg.Web都將加載調試符號。 MyLib.Test不會加載調試符號。

項目 > 屬性 > C++ > 常規 > 調試信息格式-程序數據庫 (/Zi)

我已經檢查了Linker > Debugging並且已經在生成調試信息。 當我啟動應用程序時,符號被加載( Debug > Windows > Modules )。 設置調試信息格式為我修復了它。 希望這對某人有幫助!

主項目具有對同一項目的項目參考和文件參考。

就我而言,主項目有兩個引用,一個是項目引用,另一個是文件引用,指向同一項目生成的 dll。

因此,pdb 文件沒有被復制到主項目的 bin 文件夾,導致符號不可用。

有時 IIS 會出於某種原因保留文件。 我不得不刪除該網站並重新創建它,問題就消失了

檢查您是否啟用了“僅啟用我的代碼”。 如果是,請禁用它。

我設置了一個斷點,並在執行代碼時在該斷點上收到了這條消息。 但是,斷點只能由單元測試訪問。 我必須右鍵單擊單元測試並選擇“調試單元測試”Doh!

使用依賴注入,在我的例子中是 Autofac,通過掃描程序集來自動解決。 引用的程序集之一沒有得到解決。

我的解決方法是直接從程序集中引用一個類來強制 Visual Studio 加載程序集。 僅將程序集作為參考將不會在應用程序運行時加載程序集。

我的理由是不推薦使用 Telerik OpenAccess ORM。 安裝新版本就可以了。 必須下載安裝。 只有 NuGet 更新不起作用。 其他人也提到過

將其放在這里,希望對某人有所幫助。

關於網絡服務,我遇到了缺少符號的問題。

愚蠢的解決方案是在構建解決方案時設置項目沒有設置為構建,這意味着當我右鍵單擊設置項目並安裝服務時,然后附加到進程; 在沒有 pdb 的情況下安裝了相同的過時服務,因為它不匹配 = 沒有工作斷點。

手動解決方案是右鍵單擊安裝項目並構建它,然后從中安裝。 然后,當解決方案以調試模式構建時,我更改了解決方案項目構建列表以包含安裝項目。

還值得一提的是,在某些情況下會出現問題,因為您要調試的項目是外部服務。 在這種情況下,您必須將調試器附加到正在運行的進程。

對於我的 Xamarin 應用程序,在我完全擦除源代碼管理文件夾、執行“獲取最新”並重建解決方案后,它終於開始調試。

從 Visual Studio 2017 15.3.1 到 15.3.5 出現了解決此問題的新方法。 如果您使用的是EditorConfig ,則 charset=utf8 選項會導致這些症狀。 VS 團隊已經復制了這一點,並表示他們正在努力

因此,一種解決方法是在 .editorconfig 文件中注釋掉您的 charset=utf8 行。

截至 2017 年 10 月 9 日,狀態現在為“已修復 - 待發布”。

(感謝 John Hatton, “當前不會命中斷點。源代碼與原始版本不同。”這是什么意思?

No meu caso dei um F11 na chamada do método, forçando entrar no método onde o BP com problema estava, sendo assim, o break point foi recuperado。

在我的情況下,我在方法調用中給了一個 F11,強制進入問題 BP 所在的方法,因此斷點被恢復。

有許多不同的解決方案可以解決此問題。

另一種解決方案是確保您的代碼是可訪問的。 例如:

在函數中的 Return 之后添加的任何代碼。 添加一個 GOTO 可以有效地跳過具有斷點的代碼。

我不是說這些是正常的,但它們也是原因。

通過啟動外部應用程序調試程序集時,有一些額外的注意事項:

  • 外部應用程序可以從清單文件加載它自己的程序集 (DLL) 副本。 (例如,文件appname.exe.manifest )如果是這樣,您可能需要通過手動更改清單來禁用它。

  • 即使沒有清單,外部應用程序也可能只是嘗試從其自己的文件夾中的 DLL 加載。 您將不得不刪除/重命名這些。

處理好這些步驟后,在調試器中運行的程序集版本應該可以正確加載並且可以正常調試。

我有同樣的問題,檢查了所有以前的解決方案,但對我不起作用。 簡單但添加的答案只是為了確保人們不會像我一樣陷入這個不存在的問題。

對我有用的是,我在管理員模式下運行 VS 2013 並在正常模式下運行就可以了。 多次嘗試切換到正常和管理模式,並且始終正常工作。

IDE: VS 2013 Professional
Version: 12.0.40629.00 Update 5

我有這個問題。

我的問題是aspx、aspx.vb和aspx.designer.vb文件導入錯誤(可能是一一導入到項目中)。

斷點在 aspx.vb 中,但無法訪問,並且有此問題的警告。

解決方案是刪除這三個文件並再次導入。 現在我可以到達斷點。

太容易了。 它也發生在我身上,因為項目的 .pdb 文件沒有復制到 debug\Bin 文件夾中,然后它無法在調試模式下加載符號(.pdb 文件)。 這樣:您必須重新構建目標項目並手動復制執行項目的 debug\Bin 文件夾中的符號(.pdb 文件)

我測試了這個問題的所有答案對我不起作用,我使用以下方法:

我從項目中排除了該文件具有該 Visual Studio 無法命中它們的斷點,然后我將它們包含到我的項目中並工作斷點。

確保您的文件是從相關項目中打開的,而不是從另一個(舊)項目中打開的。

例子:

  • 您正在處理一個項目,關閉 VS,但您在 VS 中打開了文件(選項卡)。

  • 將您的項目復制到新文件夾並打開解決方案。 文件(選項卡)將從舊目錄加載,如果要調試,則在關閉它們並從當前文件夾重新加載它們之前無法調試。

我非常接近重新安裝我的 VS,因為其他答案對我沒有任何幫助,但幸運的是我在我的項目中意識到了這一點,我現在可以調試了。

昨天在一個 Web 項目中遇到了這個問題,嘗試了這里提出的許多解決方案,但沒有奏效。

我是怎么解決的?

右鍵單擊項目 ->屬性-> Web選項卡

服務器部分,我將IIExpress更改為Local IIS ,創建了虛擬目錄,瞧!

檢查 csproj 文件中是否有<DebugType>Full</DebugType>的行/條目如果存在,則嘗試將其刪除並再次嘗試調試

也許我可以添加一些新的東西。 除非我在這么多帖子中遺漏了某些東西(可能!),否則似乎沒有被接受的解決方案或任何提及System.Reflection.Assembly.LoadFrom(filename)的方法,這是 .NET 在您需要顯式控制時提供的方法。 如果“模塊”選項卡顯示從意外位置加載的程序集,這就是您可以修復該問題並恢復調試中斷的方法。

有時這樣做有很好的理由。 對我來說,那是在我支持一個允許用戶創建一些任意插件的平台時,我不得不小心地與那些插件競爭公共程序集的加載位置。 目標是確保與我的 Platform.exe 位於同一目錄中的“黃金”版本總是可以毫無例外地加載。 (將它們放入 GAC 有時是正確的答案,但並非總是如此)。

我在其他帖子中正確地提到了默認構建設置會導致在構建時將引用的程序集本地復制到插件的 \bin 中。 插件是一個與您想要發生的完全相反的用例示例。 可能有 100 個用戶擁有 100 個插件和給定程序集的 100 個副本。 100 個中的哪一個會加載? 它會是最新的、正確的版本嗎?

以下是我如何能夠為我支持了十多年的真實平台可靠地做到這一點,預先加載程序集。

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Windows.Forms;

[STAThread]
static void Main()
{
    PreLoadAssemblies();
    Form appInstance = new InstanceManager();
    Application.Run(appInstance);
}

private static void PreLoadAssemblies()
{
    // Obtain an explicit folder path relative to where
    // the main executable ("Platform.exe") is running.
    string dir =
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
        @"\Accessories\PlugIn\google-drive-sync\netstandard2.0";

    PreLoadAssembly(dir, "Google.Apis.Auth.dll");
    PreLoadAssembly(dir, "Google.Apis.Drive.v3.dll");
    PreLoadAssembly(dir, "Google.Apis.Auth.PlatformServices.dll");
    PreLoadAssembly(dir, "Google.Apis.dll");
    PreLoadAssembly(dir, "Google.Apis.Core.dll");
    PreLoadAssembly(dir, "Google.Apis.PlatformServices.dll");
    PreLoadAssembly(dir, "Newtonsoft.Json.v10.dll");
}

private static void PreLoadAssembly(string dir, string name)
{
    try
    {
        Assembly resolved = Assembly.LoadFrom(dir + @"\" + name);
        Debug.Assert(resolved != null);
    }
    catch (Exception ex)
    {
        Debug.Assert(false, ex.Message);
    }
}

我有同樣的問題。 我在這篇文章中嘗試了一切。

我的解決方案?

更改 Visual Studio 版本(我試圖在 VS2013 上打開它,最終在 VS2015 上打開它)

對我來說,測試類用[Ignore]注釋。 我不知道為什么它仍然出現在測試資源管理器中,但無論如何。 這與 Visual Studio 單元測試框架有關。

在此處輸入圖像描述

我嘗試了此處發布的所有答案,但我沒有工作。 對我來說,解決方案是檢查“啟動瀏覽器” 在此處輸入圖像描述

我的經驗是嘗試遠程調試我部署到 AWS 服務器的 Web 應用程序。 問題是當我部署到服務器時,它會編譯並創建 exe 和 pdb 文件。 但是本地編譯的 exe 和 pdb 文件與服務器上部署的文件不匹配,所以當我附加到遠程進程然后嘗試為我的項目的 DLL 加載 Debug/Windows/Modules 中的符號時,它會找到本地 pdb 文件和我收到錯誤消息“PDB 與圖像不匹配”。

因此,在嘗試了上述所有建議之后,這就是我使斷點起作用的方法:

  • 連接並登錄到遠程 Web 服務器。
  • 轉到保存 exe 和 pdb 文件的文件夾。 在我的例子中,它是 C:\inetpub\AspNetCoreWebApps\app。
  • 復制該文件夾中的 *.pdb 文件。
  • 將 pdb 文件粘貼到您正在查找項目的 pdb 文件的本地計算機上。 您將在 Debug/Windows/Modules 中找到路徑,右鍵單擊您的 DLL 並選擇 Symbol Load Information...
  • 現在您可以使用 Debug/Attach to Process... 附加到遠程進程,它應該加載符號,因為 pdb 現在與遠程 exe 文件匹配。

完成遠程調試后,您可以重建項目以恢復當前的 pdb 文件,以便您可以在本地進行調試。

可以向符號路徑列表添加一個路徑,該路徑將從遠程服務器加載 pdb,但如果有的話,我還沒有找到它。 這可能比簡單地將 pdb 文件從遠程服務器復制到本地 VS 環境更麻煩。

就我而言,問題是我添加了一個新項目/組件,但我忘記了簽名。 當解決方案中的其他組件被簽名時,您的新組件也需要被簽名。 所以我的解決方案是將 snk 文件(來自另一個項目)復制到新項目文件夾中,然后從項目屬性/簽名中選擇它。

另一個問題可能是如果團隊使用不同版本的 VS,或者如果有人使用 Rider 和某些 VS,他們可能會在項目 GUID 上使用不同的大小寫。

我的情況是使用 Visual Studio 2019,我們同時擁有 C# 和 C++ 代碼。 不知道我搞砸了什么,但解決方案是在 C# 代碼正常工作時從 auto 更改為 Native。

Debug -> Attach to Process...並在其中顯示 Attach to: 選擇本機代碼(在我的情況下)。 找到有問題的過程,瞧。

在我的情況下,它是一個名為Strong Namer 的包,它包含在另一個 Nuget 中,導致了這個問題。 刪除 Strong Namer 解決了這個問題。

或者,特別是當依賴於 Strong Namer 包時,使用強名稱密鑰對項目進行簽名也可以解決問題。

我有一個遇到這個問題的 ASP.NET 項目。 似乎涉及一些臨時文件,並且該項目加載了一個舊文件,而不是當前文件。 更改解決方案的文件夾名稱可解決此問題。

在查看了以上所有內容后,這在 VS2019 中為我解決了 - 工具 > 選項 > 取消選中“要求源文件與原始版本完全匹配”:

在此處輸入圖像描述

我有一個 blazor webassembly 項目並嘗試了幾乎所有答案,但沒有任何效果,解決方案是使用 Chrome 而不是 Firefox 並達到斷點。 還有 blazor webassembly 的文檔說以下

Visual Studio 需要“工具”>“選項”>“調試”>“常規”中的“為 ASP.NET(Chrome、Edge 和 IE)啟用 JavaScript 調試”選項。 這是 Visual Studio 的默認設置。 如果調試不起作用,請確認已選擇該選項。

有人在我的launchSettings.json項目的 launchSettings.json 中將"launchBrowser": true更改為"launchBrowser": false

它確實啟動了瀏覽器,但沒有導致斷點。 所以我不確定 launchBrowser 甚至可以做什么。

這花了我4個多小時才發現! 在此處添加它以防萬一它可能會節省一些時間!

對我有用的是我去了任務管理器(Ctrl+Shift+Esc)-> 單擊詳細信息,找到調試時通常附加的進程(例如 w3wp.exe),然后單擊結束任務。

樣本圖像

如果您的解決方案中有多個項目,可能是您正在調試的項目/斷點未設置為啟動項目。 在我的例子中,我從同一解決方案中的其他項目調用 web 服務,因此 web 服務不是啟動項目並且 brfeakpoint 沒有命中。我將 ws 設置為啟動項目並啟動調用項目的新實例。 它對我有用。

對於那些使用 ASP.Net(框架)WSP 應用程序的人來說,還有一個答案。

我能讓 VS 正確調試的唯一方法是在compilation行的 web.config 中確保debug="true"

<compilation debug="true">

我在嘗試調試 WP7 應用程序的后台代理時遇到了這個問題。 事實證明,這個調試問題只是真正問題的一個症狀:我的后台代理根本沒有在調試模式下運行。 我遵循了以下關於如何實現后台代理的指南:http: //msdn.microsoft.com/en-us/library/hh202941 (v=vs.92).aspx

...但忘記添加

#define DEBUG_AGENT

這意味着我的代理實際上從未在調試模式下啟動。 添加此行后,該線程所涉及的問題就消失了。

嘗試干凈構建您的解決方案。 為我工作。

因為另一個項目中的文件同名,可能是你有兩個控制器同名

以上都不適合我。 我的代碼以某種方式加載了 x86 的所有符號,但沒有加載 x64 的所有符號。 通過將調試屬性中的調試器類型設置為以下值,我在反復試驗后解決了這個問題:

  • 申請流程:僅限托管
  • 后台任務進程:僅限托管

將這些值設置為僅托管

進行此更改后,符號已正確加載到 x64 上

在 Visual Studio 中檢查

構建 => 配置管理器 => 活動解決方案配置

如果它設置為Release而不是Debug ,則不會命中斷點。

從 VS2019 - 16.8.4 開始,我使用 Microsoft Edge 來完成這項工作。 我希望微軟能在 Firefox 中修復它。

我很想弄清楚為什么我的 JavaScript 文件無法調試,它需要查看“腳本文檔”(加載的腳本)才能意識到我的腳本不存在。

設計師已經編輯了頁面標題,並用一個組合的縮小版本替換了我的個人開發者 JavaScript 文件。 直到半小時的谷歌搜索和調試嘗試,我才意識到。

所以基本上我建議在調試時查看該列表。 如果它不在那里,則無法調試。 多哈。

設計師做的是對的。 它應該發生在發布階段,而不是測試版。 包含哪些腳本被縮小的列表也很好,因此可以重建它以進行開發。

順便說一句,我從以前的答案中嘗試了 Modules 的東西,顯然不是這樣。 該腳本實際上沒有被加載到項目中。 嘆。

暫無
暫無

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

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