如何解决“当前不会命中断点。此文档未加载任何符号。 警告?

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

提问人: 提问时间:1/29/2010 最后编辑:14 revs, 10 users 31%Instance Hunter 更新时间:10/23/2023 访问量:1744509

问:

C# 桌面应用程序(在 Visual Studio Express 版本上)正常工作,但在 5 秒后无法正常工作。

我尝试了以下方法:

  • 确保在所有程序集上设置了调试配置、调试标志和完整的调试信息。
  • 从我的整个机器中删除所有 bin 和 obj 文件夹以及与项目相关的所有 DLL 文件。
  • 从头开始重新创建导致问题的项目。
  • 重新启动。

解决方案中有两个 Windows 窗体项目。其中一个加载调试信息,另一个不加载。它们都引用了我试图在项目文件中以完全相同的方式获取调试信息的程序集。有什么想法吗?


我想在这里补充一点,主要是在我回过头来回顾这个问题时,符号在加载程序集之前不会加载,而程序集在需要之前不会加载。如果断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且会将断点显示为未命中)。

C# .NET 调试 断点 visual-studio-express

评论

2赞 Vasyl Boroviak 1/29/2010
使它们都加载调试信息。并尝试卸载您当前未运行的项目之一。
162赞 Polyfun 1/29/2010
调试时,转到“调试”、“Windows”、“模块”视图。这将显示有关已加载模块和符号状态的信息。您可以右键单击模块并尝试从其他位置加载符号。
21赞 Instance Hunter 1/29/2010
Express Edition 没有“模块”视图。
19赞 Tim Coker 10/17/2011
关于程序集的好点,直到需要时才加载。调试器将显示不会命中断点,但加载程序集后,显示将更改/断点将命中断点。一个俗气的解决方法是在程序启动时调用程序集,以强制加载程序集。
0赞 ogg130 7/7/2023
我特别喜欢这种情况是如何突然发生的,在什么事情都没有做任何会导致一切中断的事情之后,现在我必须搜索 500 个不起作用的堆栈溢出建议,以弄清楚为什么我不能在一切像往常一样工作之后突然调试代码永远。爱上它!

答:

1326赞 7 revs, 6 users 33%Hans Passant #1

到达断点或使用 后立即开始调试,请使用 .您将看到加载到进程中的所有程序集的列表。找到要获取其调试信息的那个。右键单击它,然后选择符号加载信息。您将看到一个对话框,其中列出了它在其中查找程序集的 .pdb 文件的所有目录。根据实际的 .pdb 位置验证该列表。确保它找不到旧的。Debug > Break AllDebug > Windows > Modules

在正常项目中,程序集及其 .pdb 文件应始终由 IDE 复制到与 .exe 相同的文件夹中,即项目的 bin\Debug 文件夹。如果您一直在玩它,请确保从 GAC 中删除一个。

评论

43赞 Nicolas Raoul 9/21/2012
问题是关于快速版的,不幸的是,这个答案不适用于。实际上没有一个答案适合我,我还尝试删除 Debug 文件夹并重建。
2赞 Winteriscoming 8/15/2022
如果我的库在主项目的 bin\Debug 中.pdb了 .pdb 文件,但在模块中我看不到此程序集,我该怎么办?而且我无法调试库...stackoverflow.com/questions/73359928/......
315赞 4 revs, 4 users 83%Patrick #2

只是一些简单尝试的东西 - 你可能已经尝试过了。 右键单击解决方案资源管理器中的“解决方案”,单击“清理解决方案”,这将删除与解决方案关联的所有已编译文件和临时文件

重新生成解决方案,然后再次尝试调试。

我也遇到过解决方案中多个项目的断点问题 - 有些编译为 x86,有些编译为 x64。

评论

0赞 Attila 3/15/2023
对我来说,这也是解决方案。但对其他人的提示:请注意 - 如果你有一个 Web 应用程序,其中 IIS 设置为你的项目文件夹,你必须在清理/生成应用程序之前停止 IIS,因为 DLL 是由 IIS 加载的 - 因此它无法删除 DLL,调试器仍将使用你以前的字节码。
20赞 DS. #3

您需要在编译器设置中启用“生成调试信息”

14赞 2 revs, 2 users 57%cjo30080 #4

我们找到了问题的原因。此代码在 .aspx 文件的 Page 指令中使用“CodeBehind”属性,而不是“CodeFile”属性(ASP.NET 2.0 及更高版本)。经过几天的绝望,一个简单的搜索和替换解决了问题。

327赞 4 revs, 4 users 43%Majid Basirati #5

取消选中 “启用我的代码” 选项

工具/选项/调试/常规

评论

37赞 Jazimov 6/25/2017
需要明确的是:在 VS 2017 中,此设置专门位于“调试”->“常规”窗格下的“工具”->“选项”对话框中(准确地说,没有“调试”窗格)。该复选框称为“仅启用我的代码”,而不是“仅启用我的代码”。
0赞 Quico Llinares Llorens 12/20/2023
这对我有用。
1赞 Anders #6

我在尝试调试 WP7 应用程序的后台代理时遇到了这个问题。事实证明,此调试问题只是实际问题的一个症状:我的后台代理根本没有在调试模式下运行。我遵循了以下有关如何实现后台代理的指南:http://msdn.microsoft.com/en-us/library/hh202941(v=vs.92).aspx

...但忘了添加

#define DEBUG_AGENT

这意味着我的代理从未在调试模式下实际启动。添加此行后,此线程所涉及的问题就消失了。

6赞 2 revs, 2 users 82%Sydney_dev #7

我正在使用 - 这是我的新手,正在将 C# 应用程序与静态库集成。VS10

我编写了一个托管代码来连接它们。我可以在除 .dllstatic lib

我收到了上述消息 - 此文档未加载任何符号。我尝试了上面的许多建议。

我可以看到符号没有被加载。我终于注意到一个复选框 配置调试,启用非托管代码调试。

这允许我在函数中设置断点。static lib

26赞 4 revs, 2 users 80%Andy #8

尝试在 Windows 中以管理员身份运行 Visual Studio。

4赞 Mark Whaling #9

对于 ASP.Net 应用程序,请检查站点的属性,ASP.NET 选项卡。确保选择了正确的 ASP.NET 版本。

741赞 8 revs, 7 users 53%juFo #10

检查以确保您不在发布中,而是在调试中。

在调试中时:

首先,尝试通过右键单击项目>重新生成来重新生成项目 如果这不起作用,请尝试清理项目。(right mouse click on the project > clean)

如果这不起作用,请检查以下内容:

  1. 右键单击您的项目
  2. 选择[属性]
  3. 选择 [Build] 选项卡
  4. 确保选中[定义DEBUG常量]和[定义TRACE常量]
  5. 确保未选中 [优化代码]
  6. 点击Build标签页底部的 [高级] 按钮
  7. 确保 [Debug Info:] 设置为 [full]
  8. 单击[确定]并重新构建项目;-)

(第 7 步生成文件,这些是调试符号).pdb

评论

0赞 Top-Master 4/20/2022
在 C++ 中,我们可以启用“为发布生成最小的调试信息”,其中文件的行为类似于所谓的“源映射”(从 JavaScript 中已知),但不会损失任何优化或性能。.pdb
0赞 Anomaly 5/19/2023
清洁项目为我做到了
8赞 2 revs, 2 users 77%user781700 #11

我也遇到了同样的问题,我在 x86(或 x64)中重建了整个解决方案(包括引用的项目)

尽管我从 Configuration Manager (Build->ConfigManager) 将所有项目设置为 x86,但我的某些项目未设置为 x86。

因此,只是为了确保右键单击项目并遵循

项目 -> 属性 -> “调试”选项卡,验证“配置”和“平台”。

1赞 Joel Peltonen #12

对于发生此错误的某些情况,另一种解决方案是:检查您的生成操作

我在 asp.net MVC3 项目中遇到了这个问题;由于某种未知原因,我的一个控制器将 Build Action 设置为 EntityDeploy,尽管它应该是 Compile

1赞 Gary #13

我已经完成了清理和重建的事情。那没有用(通常确实如此)。 现在,我在调用服务之前附加到 w3wp,然后让它调用服务一次,命中另一个断点,然后我更改执行点,以便它将再次运行同一行(调用服务),然后它实际上停止在服务方法中的断点。

1赞 2 revs, 2 users 67%mattpm #14

就我而言,它是一个引用类库项目的 Windows 应用程序 - 我可以调试 Windows 应用程序,但不能调试类库。正在生成 pdb 文件。但是,我确实发现,如果我在调用类库时进行调试,则可以单步执行该库。

65赞 6 revs, 3 users 55%Serj Sagan #15

有时,即使它给你这个错误,仍然会被击中,所以请忽略这个错误。Breakpoint

这在 Web 应用程序中经常发生,即 .ViewsMVC.cshtml

评论

0赞 john blair 7/21/2023
类似的问题。我最终清理了溶液,进行了重建,并且至关重要的是,之后必须重新启动Visual Studio。然后剃刀断点被击中。
4赞 montelof #16

在将另一个 Web 服务 ASMX 文件复制粘贴到现有 Web 服务中后,我发生了这种情况,在尝试调试最近添加的服务时导致相同的错误,为了能够调试,我不得不在没有调试的情况下启动,然后附加到进程。这很奇怪,但这是我找到能够调试的唯一方法。

51赞 4 revs, 2 users 90%Arne H. Bitubekk #17

检查 bin/Debug 文件夹中是否缺少 .pbd 文件。如果是,请转到项目的“属性”,选择“构建”,然后选择底部的“高级”。在出现的新窗口中,在“调试信息”下选择“完整”。这是我的问题,并为我解决了它。

显示在哪里可以找到设置

1赞 Curtis White #18

我在 2013 年推出 ASP.NET 网站时就遇到过这种情况。就我而言,一旦 Web 浏览器完全启动,它似乎就会消失。

1赞 dgorissen #19

尝试在 sharepoint 项目中调试 silverlight 应用程序时出现问题。在项目属性的 sharepoint 选项卡下,必须显式启用对 silverlight 应用程序的调试。否则,您会收到此错误。

4赞 3 revs, 3 users 45%Sydney_dev #20

如果我们从 获取最新的,所有文件都将处于只读模式。VSTS

在运行项目时,所有类库类都是只读的,断点变为空并说“.Breakpoint will not currently be hit

没有为此文档加载任何符号”。

解决方案 1

转到项目位置并右键单击:

folder ---> Properties ---> General Tab ---> UNCHECK read-only 
(Only applies to files in the folder) ---> Apply ---> Ok

解决方案 2

开始调试,

Go to Debug ---> Windows ---> Modules.

Select one assembly and Right-click ---> (Select) Symbol Setting.

在此目录中的“缓存”符号中设置“您的垃圾桶路径”,然后在“符号”中选择“服务器”。MicrosoftPDB location

单击加载所有符号。这需要时间。然后单击“确定”。

现在,所有程序集的符号状态已从“找不到或打开 PDB”更改为“”。Symbols loaded

评论

0赞 Bala Kumar 12/23/2013
如果使用的是“附加到”进程,则“工具”--->“附加到”进程,然后选中“附加到”应为“自动:本机代码”。我们的源文件应该处于只读模式。鼠标小时打开的源文件并检查
0赞 envyM6 8/9/2017
我们的项目正在使用 VSTS...这省去了我的头痛......谢谢
16赞 Mahesh #21

我尝试了上面提到的所有方法,但没有任何效果。[清洁溶液,并检查PDB文件等]

即使发布相同的解决方案也无法解决问题。

然后我又回到了我通常要解决的问题(愚弄这个顽固的Visual Studio)

我所做的只是对代码进行有意识的更改并发布解决方案。 然后我恢复了更改并再次发布。

瞧 [PDB 文件摆脱邪灵]..这不是一个聪明的解决方案,但这确实奏效了。:-|

评论

0赞 user680891 9/5/2023
我经历了同样的情况,这对我有用。谢谢
1赞 2 revs, 2 users 75%Bengi Besçeli #22

也许你不应该做一个.AutoPostBack

如果您的代码未进行回发,则可能会收到此错误。

4赞 3 revs, 3 users 50%Kamran Hyder #23

最终对我有用的是将配置设置更改为 Release 而不是 Debug,因为编译器似乎跳过了代码,并且最终命中了断点。

0赞 Brad Germain #24

我正在使用 IE8 并尝试对一些 JavaScript 文件进行更改。尽管代码正在执行,但它不会在断点处停止,我在断点上收到相同的消息。升级到IE11为我解决了这个问题。

0赞 2 revs, 2 users 67%Tuyen Nguyen #25

在我的情况下,Visual Studio 加载全局程序集缓存 (GAC) 中的 DLL,而不是我的项目列表中的 DLL。我删除了 GAC 中的 DLL,现在我可以看到断点在工作。

11赞 3 revs, 2 users 78%Andrus #26

选项“开始调试,调试 + Windows + 模块”在 Microsoft Visual Studio Express 2013 版本中不存在。

取消选中“工具选项调试”中的“使用托管兼容模式”可解决此问题。

4赞 2 revs, 2 users 62%Pomster #27

在未命中断点的页面中,我选择了文件夹>添加现有项目,然后从其保存路径中选择该页面。这允许断点开始工作。

53赞 4 revs, 3 users 58%theITvideos #28

我只需将“”中的选项设置为“”选项即可修复错误,如随附的屏幕截图所示。Attach to ProcessAutomatically determine the type of code to debug

只需按照以下步骤操作:

 - Go to **Debug** from the menu bar 
 - Click on **Attach to Process** 
 - Near the **Attach to** option, click on the **Select** button 
 - The **Select Code Type** window will appear 
 - Now select the option **Automatically determine the type of code 
   to debug** and click the OK button.

修复调试错误

评论

17赞 stevekrzysiak 8/6/2015
对于尝试过此页面上所有内容的其他人,我通过切换到“托管(v4.5、v4.0)代码”解决了我的问题!
0赞 peregrinus 6/6/2023
我有“自动确定......”设置。这是行不通的。我通过设置“托管(.net Core,.NET 5+)+托管(本机编译)+本机”来修复。
0赞 gegy 9/7/2023
伟大!这就是我对这个问题的解决方案。非常令人沮丧的是,Microsoft 在调试符号文档的任何地方都没有提到这一点。
0赞 Gabriel G 12/2/2023
我不确定这是否是显而易见的,或者解决方案就此结束,但如果它不起作用,也许您严格按照步骤操作,在“可用进程”列表中,向下滚动到 iisexpress 并选择它,然后单击“附加”,输出窗口开始详细,并且实际上命中了断点。
0赞 Hot Licks #29

给我的:

  • 开放式解决方案属性
  • 选择“通用属性”/“调试源文件”
  • 在“不查找这些源文件”窗口中,删除几乎可以肯定错误地存在的文件。
0赞 Vadim Berman #30

另一个对我有用的提示。

如果您的项目/库已签名,甚至没有延迟签名,它仍然可能无法调试。尝试禁用签名选项,对其进行调试,然后还原签名选项。

0赞 Abacus #31

我的同事遇到了这个问题,遵循了与此处类似的步骤,但解决方案与给出的任何这些步骤都不同。

她要调试的代码位于当前项目引用的项目中,并且从未在 Visual Studio 会话中运行。DLL 从 GAC 文件夹运行,在她删除项目根本不会运行后,一旦它尝试运行就会引发异常。解决方案是将引用的项目包含在本地文件夹中。

在 SolutionExplorer 中:

  1. 选择您将用完的“调试”项目
  2. 展开“引用”(如果不可见,请选择菜单“项目”,项“显示所有文件)
  3. 右键单击断点不起作用的项目,选择“属性
  4. “复制本地”的值从 False 更改为 True

再试一次。(这对她有用!

50赞 3 revs, 2 users 89%James S #32

Debug > Windows > Modules查看正在加载的模块使我朝着正确的方向前进。

就我而言,IIS Express 似乎正在加载与临时 ASP.NET 文件不同的 DLL。

解决方案是什么?

  1. 浏览到C:\Users\<YOUR USER>\AppData\Local\Temp\Temporary ASP.NET Files\vs
  2. 删除此目录中的所有内容!
91赞 3 revsfabriciorissetto #33

选择的答案使我解决了我的问题。但我还需要做一些事情:

即使在下拉列表中选择了“调试”:

enter image description here

在“属性”项目中,>“生成”:

enter image description here

Visual Studio 未将符号加载到特定项目。因此,在该下拉列表中,我选择“Configuration Manager”,并看到我的 Web 项目的设置不正确:

enter image description here

enter image description here

然后我将其设置为“调试”,它开始生成文件。我需要手动复制 PDB 和 DLL 并放入 VS 正在寻找的文件夹中(这是所选答案帮助我的地方):.pdb

enter image description here

评论

0赞 Ben 5/14/2018
对我来说,关键是没有选中“部署”框,因此在构建后没有重新部署 pdb
0赞 Josh #34

对我来说,另一个解决方案是后期构建无法闯入主项目的 bin 文件夹的项目。

2赞 2 revs, 2 users 67%WindyHen #35

我在WinCE上构建时碰巧遇到了这个问题,似乎“Clean”没有清理设备上的目标文件夹,我通过更改设备上的输出文件夹(项目属性-->设备选项卡-->将输出文件夹更改为之前失败的调试以外的其他文件夹)来恢复调试/中断 - 瞧!!它有效。

可能需要在设备上进行手动清理,但稍后会进行清理。

评论

0赞 Ben 1/8/2019
是的,只需删除可执行文件,如果被占用,请重命名它们。
7赞 2 revs, 2 users 75%Tratak #36

我要停止调试器的 .dll 以及在 .exe 文件附近复制的关联 .pdb 文件。这些文件的日期较早,所以我认为它们没有在运行时更新。我手动删除了它们,Visual Studio创建了另一对并将这个新对放在.exe附近。现在断点可以工作了!

也许Visual Studio无法复制和替换.exe附近的现有文件(.dll和.pdb),因为那里还有另一个文件。因此,如果我手动删除,那么 VS 可以在 .exe 附近创建一个新的。

我认为问题的根本原因是Visual Studio在运行时使用另一个文件,而不是项目中的文件,并停止。

0赞 charlie #37

Qt .pro生成的项目也存在此问题。原来我忘了设置一个环境变量来确定 properties/general/Output Directory。微不足道的,首先要看的,但有时我们错过了显而易见的。

0赞 Edza #38

我不小心在文本编辑器中打开了项目文件,它被卸载了。不太可能,但如果你被卡住了,请检查一下。

1赞 2 revs, 2 users 71%Chandu #39

就我而言,问题出在我的web.config文件上。

它是<compilation debug="false" strict="true"

我把它改成了

<compilation debug="true" strict="false".现在我可以调试应用程序了。

1赞 2 revs, 2 users 67%Tom Gordon #40

如果添加生成后处理以将资源元数据添加到 DLL(公司名称、版本号等),如“rc.exe my_dll.rc”所示,这可能会导致 DLL 与 .pdb 文件不匹配。如果签名不匹配,则不会加载调试所需的文件和所有符号。从调试版本中删除此内容。

2赞 3 revsNeo #41

如果您发现必须按特定顺序在解决方案中单独生成项目才能生成解决方案,因为在清理后直接生成解决方案不起作用,然后发现问题中描述的问题,则可能是由于包含了一些其他项目,这些项目引用了不正确的相对路径,因为它们已从不同的位置添加到解决方案中位置。因此,相对路径不会与位于 .sln 文件正下方的文件夹中的 .csproj 文件位于同一位置。

它之所以会按特定顺序逐个生成项目,是因为其他项目引用相同的库,但随后生成到 GAC。解决方案最终会构建,但它加载的符号来自 GAC,这些符号可能会过时。

解决方案是重构解决方案和项目的物理文件夹结构,或者单独打开 .csproj 文件并修复相对路径,以便对任何给定库的所有引用最终指向所有项目中的同一位置。或者也许使用令牌。$(SolutionDir)

如果所有其他方法仍然失败,则需要强制 Visual Studio 重置生成配置,这需要取消选中所有生成配置的所有项目,然后重新检查所有项目 - 请参阅此处的解决方案。

0赞 j2associates #42

我意识到这是一个古老的话题,但为了他人的利益,这里是发生在我身上的事情。问题在于我如何应用 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
0赞 Cristian E. #43

我的丢失主要是因为我有 2 个项目停放在同一个 IISExpress URL 上,请确保指定不同的端口并点击 CreateVirtualDirectory。

1赞 2 revsNathan Kidd #44

确保您的代码不会在链接时被抛出。尽管编译器可能会重新生成对象,但如果链接器没有看到对代码的引用,则会在尝试设置断点时将其抛出并导致此错误。

0赞 Joshcodes #45

这可能是由于测试项目、Web 项目或其他执行项目具有对与正在加载的模块同名的项目的 Nuget 引用所致。

在解决方案中以以下示例项目为例:

  • Vendor.ABC
  • MyLib(参考 Vendor.ABC)
  • MyProg(控制台程序: 仅引用 MyLib)
  • MyProg.Web(MVC 项目:引用 MyLib 和 解决方案项目 Vendor.ABC)
  • MyLib.Test(测试项目:参考资料 MyLib 和 Nuget 包 Vendor.ABC)

MyProg并且都将加载调试符号。 不会加载调试符号。MyProg.WebMyLib.Test

5赞 3 revs, 3 users 62%Sam #46

就我而言,我正在编译一个.class library (DLL)

似乎没有加载任何模块,所以我什至无法手动加载符号。Debug -> Modules

我的解决方案是将这一行添加到我的代码中:

System.Diagnostics.Debugger.Launch();

到达此代码后,将触发异常,并显示一个对话框,询问要使用哪个 Visual Studio(即 的新实例 、 的新实例 )来调试程序。.NET FrameworkVS 2008VS 2013etc

可以选择加载了项目的现有 VS 实例。

这会将进程附加到您的会话并加载所有符号,现在您可以调试您的项目。VS

当然,编译必须使用 Debug 配置完成,而不是 .Release

1赞 2 revs, 2 users 67%done_merson #47

我个人的情况是,调试在最初创建的 Visual Studio 2013 中工作,但在 2015 年不起作用。 我能够通过将项目文件(.proj)中的版本更改为版本12而不是版本10来解决此问题。

34赞 Sandra #48

就我而言,在我的项目属性中选中了“优化代码”。这导致 VS 将我的程序集视为“不是我的代码”,反过来,它没有为其加载符号。

解决方案是取消选中此项。Location of Optimize Code checkbox

0赞 Jehanlos #49

项目>属性 > C++ > 常规>调试信息格式 - 程序数据库 (/zi)

我已经在调试>检查了链接器,并且已经在生成调试信息。当我启动应用程序时,加载了符号(调试> Windows > 模块)。设置调试信息格式为我解决了这个问题。希望这对某人有所帮助!

0赞 Abhijeet Nagre #50

主项目同时具有对同一项目的项目引用和文件引用。

就我而言,主项目有两个引用,一个是项目引用,另一个是文件引用,指向同一项目生成的 dll。

因此,pdb 文件未复制到主项目的 bin 文件夹,导致符号不可用。

1赞 2 revsHessam J.E #51

就我而言,在文件中,有以下一行,我对其进行了评论,一切都是正确的:AssemblyInfo.cs

[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
3赞 2 revs, 2 users 83%Guillaume Martin #52

对我来说,问题只是我试图在一个未设置为启动项目的 Web 项目中进行调试。 因此,在运行调试时,它没有很好地编译,并且.pdb不是最新的。

只需将项目设置为“设置为启动项目”即可。

0赞 Kai CriticallyAcclaimed Cooper #53

有时,IIS 会出于某种原因保留文件。我不得不删除网站并重新创建它,问题就消失了

2赞 3 revs, 3 users 68%user1505521 #54

问题是我的符号是从项目的虚拟目录路径中引入的......它被映射到其他项目的虚拟目录......应该在模块中加载的 Web 项目不存在

以下是我遵循的步骤:

- Right click the specific web project and select properties
- Go to Web tab
- You can see the Create Virtual Directory button
- As soon as I clicked it I saw an alert message saying "the 
  (projectname) is mapped to (anotherProjectName)" are you sure you 
   want to do the remapping?
   Something like this
- then it made sense that for why I was seeing the unnecessary 
  project name in the modules window
- Then I rebuilt the solution and was able to hit the breakpoint
1赞 MannIncognito #55

我最终将我的问题追溯到使用多个 PostSharp 版本的明显不兼容问题。我尝试调试的应用程序具有以前版本的 PostSharp,但引用了使用较新版本的项目,并且由于某种原因,这导致 VS 拒绝为该应用程序生成 PDB 文件(所有其他 DLL 都加载了它们的调试符号)。

解决方案是将每个项目中的 PostSharp 更新到最新版本并重新编译。

0赞 Brian Leeming #56

我设置了一个断点,并在执行代码时在该断点上收到此消息。但是,断点只能由单元测试访问。我不得不右键单击单元测试并选择“调试单元测试”Doh!

6赞 Sinaesthetic #57

项目属性(然后选择生成配置) >“高级”>“生成”选项卡...>调试信息(下拉列表)

设置为“all”或“pdb-only”,然后重新生成

评论

0赞 Jason 7/28/2017
我做了pdb_only,也清理并重新启动浏览器
0赞 wonster #58

使用依赖注入,在我的情况下是 Autofac,通过扫描程序集自动解析。其中一个引用的程序集未得到解决。

我的解决方法是直接从程序集中引用一个类,以强制 Visual Studio 加载程序集。仅将程序集作为引用不会在应用程序运行时加载程序集。

8赞 2 revs, 2 users 67%kselva #59

与其做所有这些事情,不如关闭并重新打开

0赞 Kevin .NET #60

我的理由是弃用了 Telerik OpenAccess ORM。安装了新版本,然后它就可以工作了。必须下载并安装。只有 NuGet 更新不起作用。其他人也提到了它

0赞 2 revs, 2 users 86%Paul Zahra #61

我遇到了关于Web服务的缺少符号的问题。

愚蠢的解决方案是,在构建解决方案时,安装项目未设置为生成,这意味着当我右键单击安装项目并安装服务时,然后附加到进程;在没有 PDB 的情况下安装了相同的过期服务,因为它不匹配 = 没有工作断点。

手动解决方案是右键单击安装项目并生成它,然后从中安装。然后,我更改了解决方案项目生成列表,以便在调试模式下生成解决方案时包含安装项目。

12赞 Christian Gollhardt #62

仅限 Web 应用程序 (IIS Express):

  • 右键单击“IIS Express Tray”并关闭 IIS。
  • 清洁解决方案

IIS Tray

6赞 2 revs, 2 users 80%tfa #63

这花了我一段时间尝试了上面的其他选项,但由于某种奇怪的原因,调试停止了工作。

工具 -> 选项 -> 调试 -> 常规 -> (取消勾选) “要求源文件与原始版本完全匹配”选项

2赞 2 revs, 2 users 80%clamum #64

通常,我们的应用程序在特定的 common/app 目录中引用 .dll,如下所示:C:\OurCompanyApps\xxxxxx.dll。这发生在一个包含一堆 WinForm 和 .dll 项目的解决方案中。.dll 项目编译为 C:\OurCompanyApps\,WinForm 项目引用该位置中已编译的 .dll 文件。

问题:我发现有问题的应用程序引用了源代码管理 bin\Debug 位置中的 .dll 项目,而不是 C:\OurCompanyApps 中已编译的 .dll 文件。

解决方案:我删除了引用,然后从 C:\OurCompanyApps\ 位置重新添加它。然后,我可以单步执行我在 .dll 代码中添加的断点。

0赞 DiSaSteR #65

还值得一提的是,在某些情况下会出现问题,因为要调试的项目是外部服务。在这种情况下,必须将调试器附加到正在运行的进程。

0赞 My Stack Overfloweth #66

对于我的 Xamarin 应用程序,在我完全擦除源代码管理文件夹、执行“获取最新”并重新生成解决方案后,它终于开始调试。

1赞 george.himself #67

就我而言,这是因为我的发布配置文件(发布到本地 IIS 站点)以某种方式设置为“发布配置”,尽管全局生成配置设置为“调试”。将发布配置文件修改为调试配置为我解决了这个问题。

0赞 JohnT #68

从 Visual Studio 2017 15.3.1 到 15.3.5 开始,出现了解决此问题的新方法。如果使用的是 EditorConfig,则 charset=utf8 选项会导致这些症状。VS 团队已经复制了这一点,并表示他们正在努力

因此,一种解决方法是在 .editorconfig 文件中注释掉 charset=utf8 行。

自 2017 年 10 月 9 日起,状态现在为“已修复 - 待发布”。

(感谢 John Hatton,“当前不会命中断点。源代码与原始版本不同。这是什么意思?

1赞 2 revsJosh Siegl #69

就我而言,这是在 Windows 更新后开始发生的,结果 Windows 更新关闭了 Internet Information Services,这使得我的 API 似乎无法命中我设置的断点,但实际发生的事情是 IIS 无法启动,因此我的应用程序代码实际上没有运行。

仔细检查是否在 Windows 功能菜单中启用了 Internet Information Services。

IIS 说明:

  • 控制面板
  • 程序
  • 打开或关闭 Windows 功能
  • 勾选互联网信息服务
  • 重新启动 Visual Studio

如果使用 IIS Express:

从旧控制面板中打开“添加/删除程序”,然后在 IIS Express 上运行修复,或者您可以转到控制面板 ->> 程序 ->> 程序和功能 ->> 打开或关闭 Windows 功能 ->> Internet Information Services 并检查父 Internet Information Services 文件夹。

我在这里得到了这个答案:指定的参数超出了有效值的范围。参数名称:site

1赞 Paul Schroeder #70

就我而言,我正在使用 Visual Studio 的实验实例调试 WPF 扩展。在开始调试然后暂停 dubugger 后,我打开了窗口。在那里,我可以看到Visual Studio尝试加载符号的目录。停止调试后,我使用 Windows 资源管理器删除了目标文件夹并重新启动了调试器。然后,Visual Studio 能够命中断点。Debug > Windows > ModulesC:\Users\<username>\AppData\Local\Microsoft\VisualStudio\15.0_76a9e536Exp\Extensions\<companyName>

0赞 2 revs, 2 users 67%Melqui Franco #71

就我而言,我在方法调用中给出了 F11,强制输入问题 BP 所在的方法,因此断点被恢复。

0赞 2 revs, 2 users 78%Nathan #72

另一种解决方案是确保您的代码是可访问的。例如:

在函数的 Return 之后添加的任何代码。 添加一个 GOTO,该 GOTO 可有效跳过具有断点的代码。

我并不是说这些是正常的,但它们也是原因。

2赞 M.Paunov #73

如果同时具有 C# 和本机代码 (C/C++),请确保为项目启用本机调试:
1. 右键单击解决方案资源管理器
中的启动项目 2.选择“属性
3”。选择“调试”选项卡
4。确保已启用本机代码调试
"Enable native code debugging" must be checked in order to be able to debug your native code

0赞 StayOnTarget #74

通过启动外部应用程序来调试程序集时,需要注意一些额外的事项:

  • 外部应用可以从清单文件加载自己的程序集 (DLL) 副本。(例如,文件)如果是这样,您需要通过手动更改清单来禁用此功能。appname.exe.manifest

  • 外部应用可能只是尝试从其自己的文件夹中的 DLL 加载,即使没有清单也是如此。您必须删除/重命名它们。

完成这些步骤后,调试器中运行的程序集版本应正确加载,并且可以正常调试。

1赞 nPcomp #75

就我而言,这些解决方案都没有奏效。我不得不去

工具 -> 导入和导出设置 -> 重置所有设置。

然后调试开始工作,没有任何问题。

4赞 I Want Answers #76

我认为如果出现此错误,则源是调试符号在构建发布后很难出现在解决方案中。

我尝试了所有其他答案 - 通常,重新生成.pdb符号或检查其位置,清理和重建项目,确保活动配置不是发布等。

最终对我有用的是右键单击解决方案资源管理器中的项目,>调试>启动新实例。

评论

1赞 John Foll 2/14/2023
他的笨拙。但如果这是我能得到的最好的,我现在会接受 kludgy。您的解决方案正在发挥作用。但对我来说,我需要测试一个 WebApi DLL。为了正确调试,我需要打开两个Visual Studio实例才能正确调试它们,因为debug start new instance显然不允许你同时运行两个不同的实例 - 最后一个取代第一个。– 但这行不通。所以我需要另一个修复。约翰·福尔
3赞 3 revs, 2 users 71%Karthik #77

以下步骤对我有用:

 1. Go to the "bin" folder of your project.
 2. Delete the "Debug" folder.
 3. Build your project again.
 4. The Debug folder will get re-created.

现在,您可以再次开始调试。

5赞 melicent #78

在尝试了一堆这些之后,最终对我有用的东西是这样的:

在 中,取消选中 。Debug > Options > GeneralEnable Edit and Continue

评论

0赞 melicent 4/13/2019
几天后我遇到了同样的问题,这次上面的解决方案并没有为我解决。我正在使用 docker-compose 运行我的解决方案,结果发现问题出在我项目的 dockerfile 上。无论 VS 最初转储到该文件中的内容都没有正确构建映像或将其放在正确的位置。
0赞 FrenkyB 9/13/2019
我无法更改此设置,它已变灰。我以管理员身份运行 VS。
1赞 2 revs, 2 users 67%peter bence #79

如果您使用的是 C++ 项目或 C# 或任何 .NET 项目中的 DLL,并且想要调试到本机代码中。然后转到“.NET 项目属性”->“调试”-“启用本机代码调试”>将其设置为 true)。

0赞 2 revs, 2 users 83%Sandip Bantawa #80

我遇到了同样的问题,检查了之前的所有解决方案,但对我不起作用。简单但添加的答案只是为了确保人们不会像我一样陷入这个不存在的问题。

对我有用的是,我在管理员模式下运行 VS 2013,在正常模式下运行可以解决问题。尝试多次切换到正常和管理模式,并且始终工作正常。

  • IDE:VS 2013 专业版
  • 版本: 12.0.40629.00 Update 5
9赞 2 revsMike #81

检查以下两个设置是否在 Visual Studio 中相同:

右键单击测试项目,转到“属性”和“生成”选项卡,然后查看“平台目标

我的都设置为“任何 CPU”,所以 x64

enter image description here

在主菜单栏上,依次转到“测试”、“测试设置”、“默认处理器体系结构”

我的设置为 X86

enter image description here

将其更改为 X64 以匹配上述设置,使内置的 Visual Studio 菜单“调试测试”正常工作,并命中以前忽略的断点,并显示消息“当前不会命中断点。本文档未加载任何符号”。

更新:

对于 Visual Studio 2019,菜单已移动了一点:enter image description here

0赞 2 revs, 2 users 86%LuisEduardoSP #82

我的问题是aspx,aspx.vb和aspx.designer.vb文件导入错误(也许它们被一个接一个地导入到项目中)。

断点位于 aspx.vb 中,但无法访问,并且有此问题的警告。

解决方案是删除这三个文件并重新导入它们。现在我可以到达断点了。

11赞 3 revs, 3 users 42%bimal george #83
1. Clean solution and Rebuild
2. Check the configuration is set to Debug
3. Make sure that the PDB file is in the Debug folder it self
4. From Debug menu click Enable All Break points
1赞 Farshid Shekari #84

我测试了这个问题的所有答案都不适合我,我使用以下方法:

我排除了该文件具有来自项目的断点,其中视觉对象 工作室无法击中它们,然后我将它们包含在我的项目中并且 工作断点。

2赞 Izaias Dantas #85

我是这样解决的: 运行项目。 转到“调试”->“Windows”->模块 选择要调试的库,然后右键单击它。选择 -> “Load Symbols” 然后将“跳过加载 suymbols”更改为“加载符号”。

0赞 2 revs, 2 users 75%DDT #86

右键单击项目 -> 属性 -> Web 选项卡

“服务器”部分,我更改了本地 IISIIExpress,创建了虚拟目录,瞧!

0赞 dkokkinos #87

检查 csproj 文件中是否有一行/条目,如果存在,请尝试将其删除并再次尝试调试<DebugType>Full</DebugType>

1赞 2 revs, 2 users 89%Mark Pazon #88

确保引用的是正确的类。

就我而言,我有一个游戏对象,我在其中向组件添加了错误的脚本。因此,Visual Studio 无法实际访问代码。

我只需要删除错误的 C# 脚本和组件并添加正确的脚本和组件。

0赞 IV. #89

也许我可以添加一些新的东西。除非我在这许多帖子中遗漏了某些内容(可能!),否则似乎没有公认的解决方案,也没有提到 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);
    }
}
0赞 2 revs, 2 users 62%DDT #90

我的解决方案是更改Visual Studio版本(我试图在VS2013上打开它,最终在VS2015上打开它)。

0赞 BryanCass #91

我的经验是尝试远程调试我部署到 AWS 服务器的 Web 应用程序。问题是,当我部署到服务器时,它会编译并创建 exe 和 pdb 文件。但是本地编译的 exe 和 pdb 文件与服务器上部署的文件不匹配,因此当我附加到远程进程,然后尝试在 Debug/Windows/Modules 中为我的项目 DLL 加载符号时,它会找到本地 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 文件,以便可以在本地进行调试。

可以将路径添加到符号路径列表中,以便从远程服务器加载 pdbs,但如果有,我还没有找到它。这可能比简单地将 pdb 文件从远程服务器复制到本地 VS 环境更麻烦。

1赞 cansu #92

我在 Visual Studio 2019 社区和 Asp.net Web 窗体项目中遇到了同样的问题。我花了 1.5 天,这 30 个答案中的任何一个都解决了我的问题。最后,我运行Visual Studio安装程序exe并选择修复选项。所以我的配置被重置了,问题完全消失了。

1赞 Chris Schaller #93

UWP:

如果要调试通用 Windows 项目 [UWP],则该过程类似于使用混合 C# 和本机代码的解决方案。 除非需要将“应用程序进程”或“后台任务进程”调试器设置为“仅托管”才能调试 C# 代码。

  1. 右键单击“解决方案资源管理器”中的“启动项目”
  2. 选择“属性”
  3. 选择“调试”选项卡
  4. 将进程调试器类型设置为“仅托管”

enter image description here

0赞 2 revsSvein Terje Gaup #94

就我而言,问题是我添加了一个新项目/组件,而我忘记了签名。当解决方案中的其他组件被签名时,你的新组件也需要签名。所以对我来说的解决方案是将 snk 文件(从另一个项目)复制到新的项目文件夹中,然后从项目属性/签名中选择它。

另一个问题可能是,如果团队使用不同版本的 VS,或者有人使用 Rider 和某些 VS,他们可能会在项目 GUID 上使用不同的大小写。

0赞 LogicMagic #95

我的情况是 Visual Studio 2019,我们有 C# 和 C++ 代码。不知道我搞砸了什么,但解决方案是在 C# 代码工作时从 auto 更改为 Native。

debug -> attach to process...以及它在哪里说 附加到:选择本机代码(在我的情况下)。找到有问题的过程,瞧。

2赞 Gen.L #96

如果您发现上述解决方案都不起作用,请尝试此操作。

右键单击“项目”->“属性”->“生成”-“高级”>”。 将调试信息从“无”更改为“仅 Pbd”或“完整”

enter image description here

3赞 2 revs, 2 users 60%Stefanos Zilellis #97

我通过以下方式解决了这个确切的问题:

 1. Open studio as administrator
 2. Use Build->Clean Solution
 3. Use Build->Build
2赞 Kye #98

转到项目的属性,然后转到“构建”选项卡。 单击“高级...”并将“调试信息”更改为“完整”enter image description here

0赞 2 revs, 2 users 75%Shay Buchnik #99

就我而言,是一个名为 Strong Namer 的包包含在另一个 Nuget 中,导致了问题。删除 Strong Namer 解决了该问题。

或者,特别是当依赖于强名称包时,使用强名称密钥对项目进行签名也可以解决问题。

1赞 SteveCav #100

左边的字段答案在这里。我有一个包含几个项目的解决方案,并且由于它们具有相同的端口号,Visual Studio 启动了错误的项目。所以是的,我的断点没有加载调试符号......

1赞 Jon Bangsberg #101

我设法最终得到了一个具有相同类的文件的两个副本。两者都在 Visual Studio 中打开,但它们具有不同的文件名,一个实际上包含在项目中,另一个未包含在项目中。

确保要设置的断点位于解决方案/项目实际编译的文件中。未编译的文件没有符号。

0赞 Tratak #102

我有一个 ASP.NET 项目遇到了这个问题。似乎涉及一些临时文件,并且项目加载的是旧文件,而不是当前文件。更改解决方案的文件夹名称解决了此问题。

11赞 2 revsRan Turner #103
  1. 通过在下拉菜单中选择来确保您在里面而不是在里面,如下图所示。Debugreleasedebug

enter image description here

  1. 然后,尝试清理项目,方法是在解决方案资源管理器窗口中单击鼠标右键,然后选择 。Clean solution

enter image description here

  1. 然后,通过在解决方案资源管理器窗口中单击鼠标右键来重新生成解决方案,然后选择Rebuild solution

enter image description here

1赞 TomDim #104

我有一个 blazor webassembly 项目,几乎尝试了答案中的所有内容,但没有任何效果,解决方案是使用 Chrome 而不是 Firefox,并且到达了断点。此外,blazor webassembly 的文档说了以下内容

Visual Studio 需要“常规”>“工具”>“选项”>“调试”中的“为 ASP.NET(Chrome、Edge 和 IE)启用 JavaScript 调试”选项。这是 Visual Studio 的默认设置。如果调试不起作用,请确认已选择该选项。

0赞 Sturla #105

有人在我的 Blazor 项目中更改为。"launchBrowser": true"launchBrowser": falselaunchSettings.json

它确实启动了一个浏览器,但没有导致断点。所以我不确定launchBrowser到底是做什么的。

我花了 4 个多小时才发现!在此处添加它以防万一它可能会为某人节省一些时间!

0赞 Amazigh.Ca #106

如果解决方案中有多个项目,则可能是正在调试的项目/断点未设置为“启动项目”。就我而言,我正在从同一解决方案中的其他项目调用 Web 服务,因此该 Web 服务不是启动项目,并且 brfeakpoint 没有命中。我将 ws 设置为启动项目,并启动了调用项目的新实例。它对我有用。

0赞 Mmm #107

对于那些使用 ASP.Net(框架)WSP应用程序的人来说,又是一个答案。

我可以让 VS 正确调试的唯一方法是确保在您的 web.config 行中:debug="true"compilation

<compilation debug="true">
0赞 Hamid Mir #108

对于那些可能发现这些解决方案中的任何一个都不起作用的人,这可能会有所帮助: 我犯了一个错误,在我的web.config中将其添加到connectionString中:

server=localhost; port=####

这导致调试停止,我删除了它并修复了它

0赞 Peter Bäckgren #109

尽管 w3wp.exe 经常出现断点问题,但对“未加载的符号”完全感到困惑。

最后,原因是我在另一个位置有一个禁用的断点(有时使用禁用的断点作为书签)。删除它后,断点再次变为红色。添加另一个禁用的断点并删除它不会使问题再次出现。

这就解释了为什么通常唯一的解决方案是删除 .vs 缓存(矫枉过正且乏味),然后删除禁用的断点。

0赞 Datboydozy #110

我在 AutoCAD 项目中遇到了这个问题 Vb.net,但上述解决方案都不适合我。事实证明,我尝试运行的dll已经加载到AutoCAD dll文件夹中。当我运行将调用所述DLL的命令时,这会导致冲突。我的解决方案是从我的Autocad dll文件夹中删除dll,然后使用我的项目文件夹中的dll运行它。这解决了这个问题。

1赞 lfassio #111

我尝试了所有方法,发现在我的情况下,解决方案是:

  1. 工具 / 选项 / 调试 / Just-In-Time
  2. “托管”选项未被选中,检查后断点就像一个魅力。

enter image description here

-1赞 Bhavik Saisuthar_AgileInfoways #112

我重置了Visual Studio的设置,然后,当我执行一个项目时,它显示断点,就像禁用一样。

解决方案:项目在发布模式下运行,您可以切换到调试。

评论

0赞 nalka 10/23/2023
您的答案没有提供比 (111 !!) 现有答案(例如这个)更多的信息,我认为您应该阅读帮助中心的答案,尤其是如何回答?导致答案删除的原因