如何补救“断点当前不会被击中。此文档没有加载符号。”警告?

C#桌面应用程序(在Visual Studio Express版本上)工作,但5秒后它不起作用。

我尝试了以下方法:

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

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


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

1614893 次浏览

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

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

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

重新构建解决方案并再次尝试调试。

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

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

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

我疯狂地试图弄清楚为什么我的JavaScript文件不会调试,然后查看“脚本文档”(加载的脚本)才意识到我的脚本不在那里。

设计师已经编辑了页面标题,并将我的个人开发人员JavaScript文件替换为组合的缩小版本。直到半小时的谷歌搜索和调试尝试,我才意识到。

所以基本上我建议在调试时查看该列表。如果它不在那里,就无法调试。Doh。

设计师做了正确的事情。它只应该发生在发布阶段,而不是测试版。缩小脚本包含的列表也很好,因此可以重建以进行开发。

顺便说一句,我尝试了之前答案中的模块内容,显然不是那样的。脚本实际上没有加载到项目中。叹息。

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

工具/选项/调试/常规

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

…但忘了补充

#define DEBUG_AGENT

这意味着我的代理实际上从未在调试模式下启动。一旦添加了这一行,这个线程的问题就消失了。

我正在使用VS10将C#应用程序与静态库集成——这是我的新手。我编写了一个托管代码dll来连接它们。除了静态库,我可以在任何地方设置断点。我收到了上面描述的消息——此文档没有加载符号。我尝试了上面的许多建议。我可以看到符号没有加载。我终于注意到一个复选框配置调试,启用非托管代码调试。这允许我在静态库函数中设置断点。

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

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

交叉发布我在类似线程>>这里<<上发现的hansk中的此修复程序:

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

查看常见属性-->启动项目

选择多个创业项目

选择对需要调试的项目启动操作。

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

调试时:

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

如果这不起作用,检查这个:

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

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

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

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

所以只是为了确保右键单击项目并遵循

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

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

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

我已经做了清洁和重建的事情。那不起作用(它通常会起作用)。现在,我在通过服务调用之前附加到w3wp,然后让它调用服务一次,点击另一个断点,然后我更改执行点,以便它再次运行同一行(调用服务),然后它实际上停在服务方法内的断点。

在我的例子中,它是一个引用类库项目的Windows应用程序-我可以调试Windows应用程序,但不能调试类库。正在生成pdb文件。然而,我确实发现,如果我调试对类库的调用,我可以进入库。

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

这种情况经常发生在MVC Web应用程序的Views中,即.cshtml

这发生在我复制粘贴另一个webservice asmx文件到现有的webservice后,导致同样的错误,当试图调试最近添加的服务,能够调试我不得不开始没有调试,然后附加到进程。

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

显示在哪里可以找到设置

我在2013年推出一个ASP.NET网站时就发生了这种情况。在我的情况下,一旦网络浏览器完全启动,它就会消失。

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

如果我们从VSTS获取最新信息,所有文件都将处于只读模式。在运行项目时,所有类库类都将只读,制动点变为空并说“断点当前不会被击中。没有为此文档加载符号”。

解决方案1

转到项目位置,右击文件夹--->属性--->常规选项卡--->UNCHECK只读(仅适用于文件夹中的文件) ---> 应用--->好的

解决方案2

选择一个程序集并右键单击 ---> (选择)符号设置。在此目录中的缓存符号中设置您的bin路径,并在PDB符号中选择Microsoft服务器。单击加载所有符号。这将需要时间。然后单击确定。

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

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

即使发布相同的解决方案也没有解决问题。

然后我回到我通常做的事情来解决(愚弄这个顽固的Visual Studio)

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

瞧[PDB文件摆脱恶灵]…不是一个聪明的决议,但这确实有效…:-|

也许你不应该做一个AutoPostBack
如果您的代码没有生成PostBack,您可能会收到此错误。
问候

最终对我有用的是将配置设置更改为发布而不是调试,因为编译器似乎跨过了代码,断点最终被击中。

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

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

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

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

我尝试了所有这些,无法让我的断点工作…

我为解决这个问题所做的是

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

在Visual Studio中检查

构建=>配置管理器=>活动解决方案配置

如果设置为上线而不是调试,则不会命中断点。

我能够通过简单地将“附加到进程”中的选项设置为“自动确定要调试的代码类型”选项来修复错误,如所附屏幕截图所示。

只需按照以下步骤操作:

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

修复调试错误

对我来说:

  • 开放溶液属性
  • 选择“通用属性”/“调试源文件”
  • 在“不要查找这些源文件”窗口中,删除几乎肯定错误存在的文件。

另一个提示对我有用。

如果您的项目/库已签名,甚至没有延迟签名,它仍然可能无法调试。请尝试禁用签名选项,调试它,然后恢复签名选项。

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

她要调试的代码位于当前项目引用的项目中,并且从未在Visual Studio会话中运行。DLL正在GAC文件夹中运行,此前她删除了该项目根本不会运行的内容,并在尝试运行时抛出异常。解决方案是将引用的项目包含在本地文件夹中。

从解决方案资源管理器:

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

再试一次。(对她有效!)

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

在我的情况下,IIS Express似乎正在从临时ASP.NET文件加载不同的DLL。

解决方案?

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

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

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

输入图片描述

在项目Properties>Build中:

输入图片描述

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

输入图片描述

输入图片描述

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

输入图片描述

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

[WINCE]我在WinCE上构建时碰巧遇到了这个问题,似乎“清洁”没有清理设备上的目标文件夹,我通过更改设备上的输出文件夹(项目属性->设备选项卡->将输出文件夹更改为以前失败的调试之外的文件夹)获得了调试/中断-瞧!!它起作用了。可能需要在设备上进行手动清理,但这将是以后。

希望这个帮助。

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

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

我认为问题的根本原因是Visual Studio在运行时使用另一个文件,没有来自项目的文件,带有停止。

Qt. pro生成的项目也有这个问题。原来我忘记设置一个环境变量来确定属性/通用/输出目录。琐碎的一个,首先要看的一个,但有时我们会错过显而易见的东西。

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

我浏览了所有答案,没有什么帮助。在我的情况下,web.config文件的问题。<compilation debug="false" strict="true"

我改为

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

我想再添加一件事,可以通过不加载. pdb文件来防止步进/中断,在任何其他论坛都找不到这个:如果您添加构建后流程以将资源元数据添加到DLL(公司名称、版本号等),如“rc.exemy_dll.rc”中,这可能会导致DLL和. pdb文件之间的错误匹配。如果签名不匹配,它将无法加载文件和调试所需的所有符号。从调试构建中删除此内容。

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

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

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

如果所有其他方法仍然失败,那么您需要强制Visual Studio重置您的构建配置,这需要您取消选中所有构建配置的所有项目,然后重新检查它们-请参阅解决方案这里

确保您将配置设置为“调试”而不是“发布”。

您可以在“发布”模式下调试启动项目,但不能使用引用的类库。

我意识到这是一个古老的线程,但为了其他人的利益,这里是发生在我身上的事情。问题在于我如何应用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

我的丢失主要是因为我有两个项目停放到同一个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不会加载调试符号。

在我的例子中,我正在编译一个类库(DLL)。调试->模块中似乎没有加载模块,所以我甚至无法手动加载符号。

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

System.Diagnostics.Debugger.Launch();

到达此代码后,会触发一个异常,并且. NET Framework会显示一个对话框,询问您要使用哪个Visual Studio(即VS 2008的新实例、VS 2013的新实例等)来调试程序。您可以选择加载项目的现有VS实例。这将把进程附加到您的VS会话并加载所有符号,现在您可以调试您的项目。

当然,编译必须使用调试配置完成,而不是发布。

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

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

解决办法是取消选中。优化代码的位置复选框

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

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

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

在我的例子中,主项目有两个引用,一个是项目引用,另一个是文件引用,指向同一项目生成的dll。

因此,pdb文件没有被复制到Main项目的bin文件夹中,导致符号不可用。

在我的情况下,在AssemblyInfo.cs文件中,有下面一行,我评论了它,一切都是正确的:

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

对我来说,问题只是我试图在一个未设置为启动项目的Web项目中调试。所以它在运行调试时编译得不好,. pdb也不是最新的。

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

希望这有帮助

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

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

以下是我遵循的步骤:

  • 右键单击特定的Web项目并选择属性
  • 转到Web选项卡
  • 您可以看到创建虚拟目录按钮
  • 我一点击它,我就看到一条警报消息,上面写着(项目名称)映射到(另一个项目名称)你确定要重新映射吗?像这样的东西
  • 那么这就解释了为什么我在模块窗口中看到了不必要的项目名称
  • 然后我重新构建了解决方案并且能够达到断点

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

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

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

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

设置为'all'或'pdb-Only',然后重建

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

我的修复是直接从程序集中引用类以强制Visual Studio加载程序集。仅将程序集作为引用不会在应用程序运行时加载程序集。

而不是做所有这些事情只是关闭和重新打开

我的原因是弃用Telerik OpenAccess ORM。安装新版本然后它可以工作。必须下载并安装。只有NuGet更新不起作用。还有人提到过

我会把这个放在这里,希望它能帮助别人。

我有关于Web服务的缺失符号问题。

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

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

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

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

IIS托盘

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

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

我得到这个并被难倒(使用Visual Studio 2013 Premium)。

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

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

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

希望这有助于某人。

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

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

在我的情况下,这是因为我的发布配置文件(发布到本地IIS站点)以某种方式设置为发布配置,尽管全局构建配置设置为调试。将发布配置文件修改为调试配置为我解决了这个问题。

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

因此,一个解决方案是注释掉. editorconfig文件中的charset=utf8行。

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

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

在我的情况下,这开始发生Windows更新后,原来Windows更新关闭了Internet信息服务,这使得我的API看起来无法达到我设置的断点,但实际发生的是IIS无法启动,因此我的应用程序代码实际上没有运行。

仔细检查Windows功能菜单中是否启用了Internet信息服务。

IIS的说明:

  • 控制面板
  • 方案
  • 打开或关闭窗口功能
  • 勾选互联网信息服务
  • 重启Visual Studio

如果使用IIS Express:

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

我得到了这个答案:指定的参数超出了有效期范围。参数名称:站点

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

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

有许多答案和许多不同的解决方案来解决这个问题。

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

在函数中返回之后添加的任何代码。添加一个GOTO,有效地跳过具有断点的代码。

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

如果您同时拥有C#和本机代码(C/C++),请确保为项目启用本机调试:
1.在解决方案资源管理器
中右键单击您的启动项目2.选择属性
3.选择“调试”选项卡
4.确保启用Native Code调试

通过启动外部应用程序调试程序集时还有一些额外的注意事项:

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

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

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

在我的情况下,这些解决方案都不起作用。我不得不去

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

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

我认为这个错误的来源是,调试符号在构建发布后很难出现在解决方案中。

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

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

以下步骤为我分叉:

  1. 转到项目的“bin”文件夹。
  2. 删除“调试”文件夹。
  3. 再次构建您的项目。
  4. Debug文件夹将被重新创建。

现在您可以重新开始调试了。

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

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

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

检查您的Solution Configuration下拉列表。确保您选择Debug,而不是Release

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

对我有用的是,我在管理模式下运行VS 2013,在正常模式下运行就成功了。多次尝试切换到正常和管理模式,并且始终工作正常。

IDE: VS 2013 ProfessionalVersion: 12.0.40629.00 Update 5

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

右键单击test project,转到Properties、Build选项卡,然后查看平台目标

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

在此处输入图片描述

在主菜单栏上,转到测试,测试设置,默认处理器架构

我的设置为X86

在此处输入图片描述

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

更新时间:

对于Visual Studio 2019,菜单已经移动了一点:输入图片描述

我有这个问题。

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

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

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

这太容易了。它也发生在我身上,因为项目的. pdb文件没有复制到debug\bin文件夹中,那么它无法在调试模式下加载符号(. pdb文件)。这样:您必须重建目标项目并手动复制执行项目

的debug\bin文件夹中的符号(. pdb文件)
  1. 清洁解决方案和重建
  2. 检查配置是否设置为调试
  3. 确保PDB文件在调试文件夹中
  4. 从调试菜单中单击启用所有断点

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

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

确保您的文件是从相关项目打开的,而不是从另一个(旧)项目打开的。

示例:

  • 您正在处理一个项目,关闭VS,但您在VS中打开了文件(选项卡)。

  • 将项目复制到新文件夹并打开解决方案。文件(选项卡)将从旧目录加载,如果要调试,则无法调试,直到您关闭它们并从当前文件夹重新加载它们。

我非常接近重新安装我的VS,因为其他答案对我没有任何帮助,但幸运的是,我在我的项目中意识到了这一点,我现在可以调试了。

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

昨天在一个Web项目中遇到了这个问题,尝试了这里提出的许多解决方案,但没有成功。

我是怎么解决的?

项目上的右键单击->属性->网页选项卡

服务器部分,我将IIExpress更改为本地IIS,创建了虚拟目录,瞧!

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

尽管听起来很愚蠢,但要101%确定您引用的是正确的类。

在我的情况下,我有一个GameObject,我在其中向组件添加了错误的脚本。因此,Visual Studio无法实际访问代码。

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

也许我可以添加一些新的东西。除非我错过了一些(可能!)在这许多帖子中,似乎没有一个可接受的解决方案或任何提及系统。反射。组装。从(文件名)加载的方法。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文件与服务器上部署的文件不匹配,所以当我附加到远程进程,然后尝试在Debug/Windows/Modules中为我的项目的DLL加载符号时,它会找到本地pdb文件,我得到一个错误“PDB不匹配图像”。

所以在尝试了上述所有建议之后,这就是我为使断点工作所做的:

  • 连接并登录到远程Web服务器。
  • 转到保存exe和pdb文件的文件夹。在我的情况下,它是C:\inetpub\AspNetCoreWebApps\app。
  • 复制该文件夹中的*. pdb文件。
  • 将pdb文件粘贴到正在查找项目pdb文件的本地计算机。您将在Debug/Windows/Modules中找到路径,右键单击您的DLL并选择符号加载信息…
  • 现在您可以使用Debug/Attach to Process…附加到远程进程,它应该加载符号,因为pdb现在与远程exe文件匹配。

完成远程调试后,您可以重建项目以恢复当前的pdb文件,以便您可以在本地调试。

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

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

UWP:

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

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

输入图片描述

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

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

我的情况是使用Visual Studio 2019,我们同时拥有C#和C++代码。不确定我搞砸了什么,但解决方案是从自动更改为原生,因为C#代码正在工作。

调试->附加到进程…和它说附加到:选择本机代码(在我的情况下)。找到有问题的过程,瞧。

从VS2019-16.8.4开始,我用Microsoft Edge来做这个工作。我希望微软能在Firefox中修复它。

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

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

输入图片描述

我通过以下方式解决这个问题:

  1. 以管理员身份开放工作室
  2. 使用构建>清洁解决方案
  3. 使用构建->构建

转到项目的属性,然后转到“构建”选项卡。单击底部的“高级…”并将调试信息更改为“完整”输入图片描述

在我的例子中,是另一个Nuget包含的名为强命名的包导致了这个问题。删除强命名器解决了这个问题。

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

这里的左栏回答。我有一个解决方案,有几个项目,因为它们的端口号相同,Visual Studio启动了错误的项目。所以是的,我的断点没有加载调试符号…

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

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

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

在审查了上述所有内容后,这在VS2019中为我解决了这个问题-工具>选项>取消选中“要求源文件与原始版本完全匹配”:

输入图片描述

  1. 通过在下拉框中选择debug,确保您在Debug中而不是release,如下图所示。

在此处输入图片描述

  1. 然后,通过在解决方案资源管理器窗口中的解决方案上单击鼠标右键并选择Clean solution来尝试清理您的项目。

在此处输入图片描述

  1. 然后在解决方案资源管理器窗口中的解决方案上单击鼠标右键重建解决方案,然后选择Rebuild solution

在此处输入图片描述

我有一个blazor Web汇编项目,尝试了几乎所有的答案,但没有任何效果,解决方案是使用Chrome而不是Firefox,并且达到了断点

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

有人在我的Blazor项目的launchSettings.json中将"launchBrowser": true更改为"launchBrowser": false

它确实启动了一个浏览器,但没有出现断点。所以我不确定LaunchBrowser会做什么。

我花了4个多小时才发现!在这里添加它,以防它可能会节省一些时间!

对我有用的是,我去了任务管理器(Ctrl+Shift+Esc)->单击详细信息,找到调试时通常附加的进程(例如w3wp.exe)并单击结束任务。

样本图像

以上都不适合我。不知何故,我的代码确实加载了x86的所有符号,但没有加载x64的所有符号。经过一些试验和错误,我通过将调试属性中的调试器类型设置为以下值来修复了这个问题:

  • 申请流程:仅托管
  • 后台任务进程:仅托管

将这些值设置为仅托管

在此更改后,符号被正确加载到x64上

在我的情况下,问题是“调试符号”构建>通用>调试符号>“没有发出符号”需要更改为“PDB文件,跨平台可移植”输入图片描述

或者相同:在*. csproj中将<DebugType>none</DebugType>更改为<DebugType>portable</DebugType>