我该如何解决“断点当前不会被击中。该文档尚未加载任何符号。” 警告?


1572

速成版上的C#桌面应用程序正常工作,然后5秒钟后不工作。

我尝试了以下方法:

  • 确保在所有程序集上都设置了调试配置,调试标志和完整的调试信息。
  • 从我的整个计算机上删除所有与项目相关的bin和obj文件夹以及所有DLL。
  • 重新创建引起问题的项目。
  • 重启。

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


我想在这里添加,主要是为我自己添加,当我再次回顾此问题时,符号将在加载程序集之前加载,并且在需要时才加载。如果该断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且该断点将被显示为未命中)。


119
调试时,转到“调试”,“ Windows”,“模块”视图。这将显示有关已加载模块和符号状态的信息。您可以右键单击一个模块,然后尝试从另一个位置加载符号。
Polyfun

14
Express Edition没有模块视图。
猎人实例

12
关于直到需要时才加载程序集的要点。调试器将显示断点不会被击中,但是显示将更改/您的断点将在加载程序集后被击中。解决此UI问题的一种简便方法是在程序启动时对程序集进行调用以强制加载程序集。
蒂姆·科克

1
我遇到了同样的问题,我注意到<DebugSymbols>true</DebugSymbols>在VS2015中没有此构建配置,因此我手动添加了它,并且效果很好。
kuskmen '16

4
删除文件名为.suo可能已经在我的项目解决了这个丑陋的问题
罗兰

Answers:


1081

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

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


4
实际上,这就是我的案子的问题。我们有一个后编译程序,使其不被视为“用户代码”……现在,我必须看看发生了什么,但是我确实确认,如果不进行后编译修改,将加载符号。@Hans谢谢您,让我节省了很多时间!发送虚拟啤酒
eglasius

29
不幸的是,问题是关于速成版,该答案不适用。实际上,没有任何答案对我有用,我还尝试了删除Debug文件夹并重建。
Nicolas Raoul

3
Microsoft Visual Studio Express 2013 Web版没有“调试Windows模块”选项。在这种情况下,如何使用修复方法?
Andrus 2014年

3
提示一下,打开您的异常,使其在您想要的位置中断(如果无法在过程开始时放置断点)...然后,您按照Han建议的调试> Windows>模块的过程进行操作。查找您要尝试进入的项目,然后查看PATH。如果显示“ C:\ windows \ assembly”,则它指向GAC dll而不是项目...
Andy Danger Gagne 2014年

5
我已将解决方案的活动解决方案配置设置为Release,然后将其更改回Debug即可解决我的问题。这个答案帮助我“记住”了要寻找的东西
gilad 2015年

436

首先尝试通过右键单击项目>重建来重建项目,如果这不起作用,请尝试清理项目(右键单击项目>清理)

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

  1. 右键单击您的项目
  2. 选择[属性]
  3. 选择[构建]选项卡
  4. 确保选中[定义调试常量][定义跟踪常量]
  5. 确保未选中[优化代码]
  6. 单击“构建”选项卡页面底部的[高级]按钮
  7. 确保将[调试信息:]设置为[完整]
  8. 单击[确定]并重建项目;-)

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


40
确保[Debug Info:]设置为[full]-为我修复了它!我在项目上设置了多个配置,我添加的新配置没有此设置。
Chiefy 2014年

1
这对我有用!但是我不能[完全]只能执行pdb
Aaron Shaver

42
原来我在发布版本中。tsk。
PNDA

2
如果您有一个带有本机启动的混合C ++ / C#项目,请确保它的项目的“调试”>“调试器类型”是“混合”。
比尔·霍格

4
我还必须确保Properties > Build > Optimize code未选中
jeffaudio

272

只需尝试一下即可-您可能已经尝试过了。在解决方案资源管理器中右键单击解决方案,单击“干净的解决方案”,这将删除与解决方案关联的所有已编译和临时文件

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

我在解决方案中的多个项目的断点上也遇到麻烦-有些编译为x86,有些编译为x64。


5
您如何在解决方案中的多个项目中修复断点-有些被编译为x86,有些被编译为x64?
理查德·李

3
如果您运行的是IISExpress(或Azure模拟器),则如果AssemblyVersion为1.0.0.0,则C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root中的文件可能不会更新。确保它是1.0。*之类的,以便每次构建Web项目时都会生成一个新版本。清洁解决方案不会清除Internet临时文件夹。
Michael Lang

1
这与执行“全部重建”相同。
乔纳森·伍德

2
@jonathan Wood-我大都同意。但是在极少数情况下,“全部重建”可能会产生稍微不同的结果-我知道我有时会看到奇怪的差异。看看这里的一些有趣的讨论:stackoverflow.com/questions/1247457/...
帕特里克

1
对我来说,这仅仅是“构建” ...“清洁解决方案”
Dominic Isaia,

238

在调试/常规设置中禁用“仅我的代码”选项。


2
是的,在具有自定义构建配置的Windows Phone 8项目中,这就是我所做的。
GoNeale

2
工作对我来说随着Windows Phone 8.1和VS 2015年社区
法比亚诺阿劳霍

20
需要明确说明的是:在VS 2017中,此设置专门位于“调试”,“常规”窗格下的“工具”,“选项”对话框中(准确地说,没有“调试”窗格)。该复选框称为“仅启用我的代码”,而不是“仅我的代码”。
Jazimov

1
这对我有用,但是当悬停或shift + f9出现错误时,我看不到变量值无法获得本地或参数的值,因为此指令指针不提供该值,可能是因为它已被优化掉了
Naveen Kumar

1
仍在Visual Studio 2019中工作!
Toby Caulk

148

Hans K交叉发布了我在类似线程上找到的此修复程序>>这里<<

右键单击解决方案->属性

在Common Properties-> Startup Project下查看

选择多个启动项目

在需要调试的项目上选择“开始操作”。


7
这也可以处理您尝试调试WEB项目的情况,该WEB项目是在VS开发服务器上运行的.NET远程处理端点,并且显示“未加载任何符号”。
D-Sect

1
这为我解决了。我认为以前有人尝试将调试附加到本地IIS服务器,而不是Visual Studio使用的IIS调试版本。
Dowlers 2013年

1
如果您删除了.suo文件,则可能会丢失在此处选择的解决方案设置,而必须再次进行设置
Redeemed1

在先前成功调试之后,我今天再次检查了这些设置,发现我的启动项目已经以某种方式恢复为单个启动项目。值得仔细检查。
安东尼·德·索萨

64

选择的答案使我得以解决问题。但是我需要做更多的事情:

即使在下拉菜单中选择了“调试”:

在此处输入图片说明

并在项目的Properties> Build中:

在此处输入图片说明

Visual Studio并未将符号加载到特定项目。因此,在该下拉菜单中,我选择“配置管理器”,并看到我的Web项目的设置不正确:

在此处输入图片说明

在此处输入图片说明

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

在此处输入图片说明


1
我在release模式下运行。谢谢 !!
Dipak Telangre

重点对我来说是,“部署”复选框未选中,因此PDB没有被重新部署建成后

43

Debug> Windows>Modules看到正在加载的模块是什么让我在正确的方向。

以我为例,IIS Express似乎正在从临时ASP.NET文件加载不同的DLL。

解决方案?

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

这是我的问题,该文件夹必须装满了损坏的DLL,这些DLL作为首选项被加载。
gburton

8
这对我有用,除了我需要清除的目录是C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ vs \
Andy

我有一个类似的问题,我已经安装了此应用程序,并且正在从我的项目中加载该DLL,而不是没有关联的PDB文件的那个DLL。卸载旧应用后,该问题已为我解决。谢谢!
Lenny K

42

我可以通过简单地将“附加到进程”中的选项设置为“自动确定要调试的代码类型”选项来解决该错误,如随附的屏幕快照所示。

只需按照以下步骤操作:

  • 从菜单栏转到“ 调试
  • 单击附加到进程
  • 在“ 附加到”选项附近,单击“ 选择”按钮
  • 将出现“ 选择代码类型”窗口
  • 现在,选择选项自动确定要调试的代码类型,然后单击确定按钮。

修复调试错误


10
对于尝试过此页面上所有内容的其他人,我通过切换到“托管(v4.5,v4.0)代码”解决了我的问题!
stevekrzysiak

切换到“托管(v4.5,v4.0)”对我来说也是如此,同时还调试了DNN ASP.Net应用程序。谢谢!
Mmm

从“自动确定要调试的代码类型”切换到“托管(v4.6,v4.5,v4.0)”对我来说很有效。我有一个带有2个类库的解决方案,一个可以通过COM访问,两个都针对框架4.6.1。
Jorb

我选择了错误的选项(“ .NET Core”而不是“ Managed v4.6”)。我选择了“自动确定...”,它成功了!最初,我在该博客文章blog.simontest.net/…上找到了该解决方案。
伊夫让·纳博科夫

41

有时,即使它给您带来此错误,breakpoint仍然会受到打击,因此请忽略该错误。这种情况相当经常在ViewsMVC web app


7
实际上,应该将其顶到顶部。我花了很多时间做上面的所有答案,但是断点实际上是命中点。只需检查:)另外,那是一个WPF桌面应用程序。
Bartosz

4
aspx似乎是按需编译的,因此只有在需要aspx页面之后,调试信息才可用
Aeroson 2016年

同样对于单元测试-您需要等待几秒钟,然后点击它。
大卫·雷法利

我认为@aeroson评论是我遇到的。一页加载了断点,而另一页则没有。从这里的答案中尝试了各种方法,然后刷新了该页面,并加载了断点。
goodeye

谢谢...挖了半个小时,才意识到断点仍然被击中...
Kyle Huang

39

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

显示在哪里可以找到设置


我建议任何人访问此页面以确保正在生成pdb,因为这是我的问题。
EatATaco

谢谢!“仅pdb”(而不是完整的)就足够了。另外,“高级”是构建底部的按钮。
格雷格·

应该在哪里生成pdb?
ylka

1
谢谢,在我完成新的Web.config转换并删除了VS 2017提供的默认配置(例如Web.Debug.config)之后,此问题为我修复了。
肯·帕尔默

1
尝试了许多其他选项(浪费了将近2个小时),这个“完整”选项解决了我的问题。谢谢!
SoftSan

29

在我的情况下,在项目属性中选中了“优化代码”。这导致VS将我的程序集视为“不是我的代码”,从而又没有为其加载符号。

解决方案是取消选中此选项。 优化代码复选框的位置


2
这也是我的问题,我一一经历了所有上述解决方案,但没有任何效果。
antikbd

我没有选中该选项,干净的解决方案,重建的解决方案等。VS始终将模块视为“优化”。我发现强迫VS更新调试信息的唯一方法是增加模块的装配版本。
alphanoch

唯一适合我的解决方案,一个适合您的#(#= ++++),但我只能投票一次
Luis Lopez


23

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


1
我最终需要在远程计算机上以管理员身份运行msvsmon。
比尔·霍格

这不是人们应该遵循的解决方案。如果这解决了问题,那么您应该重点关注为什么需要管理员权限才能使VS能够读取项目的.pdb文件内容。
Jazimov

@Jazimov我不同意。尽管我很乐意花时间进行调查,但就我而言,这解决了我的问题,并让我可以继续工作,因为我确信它也会为其他人做。如果您想研究一下并随意改善此答案,那就是它的用处。
安迪

需要说明的是:我了解它解决了Visual Studio的问题,这不是我所争论的。我争论的是接受别人的运行IDE作为推荐解决方案,而不是简单的一个解决方案。如果以管理员身份运行IDE可以解决此问题,则应使用该信息对实际的根本原因进行故障排除,以便IDE不需要管理员权限即可正常工作。
Jazimov



12

调试->选项->常规->取消选中“Enable Just My Code ”的

这对我有用。


1
似乎这可能是一个默认设置,值得检查是否将VS升级到较新版本(就像我发生的那样)。
阿伽门农

10

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


10

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

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



9

我尝试了上述所有内容,但没有任何效果。 [清洁解决方案,并检查PDB文件等。]

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

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

我所做的就是故意更改代码并发布解决方案。然后,我还原了更改并再次发布。

瞧[PDB文件摆脱了恶魔] ..不是一个明智的解决方案,但这确实起作用..:-|


7

仅Web应用程序(IIS Express):

  • 右键单击“ IIS Express任务栏”,然后关闭IIS。
  • 清洁溶液

IIS托盘


我尝试了其他答案中的许多其他建议,这些建议过去曾对我有所帮助,但今天这个建议有所帮助。就我而言,我有多个分支,尽管我进行了多次“清理和重建”尝试,但IIS Express仍以某种方式卡在了另一个分支上,并且没有刷新我尝试调试的分支。
克里斯H

6

这些答案都没有解决我的问题。我基于另一事实尝试了另一件事,即带有停止点的项目实际上不是已加载的项目。当汉斯·帕桑(Hans Passant)写道,我想停止调试器的.dll以及在.exe文件附近复制的相关.pdb文件时发现。这些文件的日期较旧,因此我认为它们在运行时未更新。我手动删除了它们,Visual Studio创建了另一个对,并将这个新对放在.exe附近。现在,breakpoins起作用了!

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

我认为另一个更改(检查等等)来自其他答案,这触发了某些变化,Visual Studio将dll和pdb从项目文件夹复制并替换为exe附近的文件夹,因此这是一个解决方案。

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

也许这个答案可以帮助某人!


6

要检查的事情只是为了清楚:确保将配置设置为“调试”而不是“发布”。您可以在“发布”模式下调试启动项目,但不能对引用的类库进行调试。


6

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

设置为“全部”或“仅pdb”,然后重建


我做了pdb_only,还清理并重新启动了浏览器
Jason

6

而不是仅仅做所有这些事情

关闭并重新打开

解决该问题的方法


在Microsoft Visual Studio 2013中为我工作:文件>关闭解决方案,然后选择文件>打开解决方案(应预先加载与该文件夹相同的文件夹)。断点立即从黄色标志变为圆形红色。那谢谢啦。
Zargold

天哪!谢谢!!!
AresDev


6

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

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


6
  1. 清洁溶液并重建
  2. 检查配置是否设置为“调试”
  3. 确保PDB文件位于其自身的Debug文件夹中
  4. 从调试菜单中单击启用所有断点

6

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

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

我的全部都设为“任何CPU”,因此x64

在此处输入图片说明

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

我的被​​设置为X86

在此处输入图片说明

将其更改为X64以匹配上述设置,将使Visual Studio内置菜单“调试测试”起作用,并击中以前被消息“当前不会击中断点”忽略的断点。没有为该文档加载任何符号”。

更新:

对于Visual Studio 2019,菜单已左右移动: 在此处输入图片说明


5

我知道我已经晚了几年,但是我认为我做错了一些事情,按照上面的步骤进行操作,然后我才意识到我会错误地将解决方案配置设置为“发布” :)


1
我可以投票1万次吗?最糟糕的是,我想我现在已经在Google上搜索了10次,而每次都是同样的愚蠢错误。也许微软可以向用户暗示它?
tfrascaroli
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.