提问人: 提问时间:1/29/2010 最后编辑:14 revs, 10 users 31%Instance Hunter 更新时间:10/23/2023 访问量:1744509
如何解决“当前不会命中断点。此文档未加载任何符号。 警告?
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 窗体项目。其中一个加载调试信息,另一个不加载。它们都引用了我试图在项目文件中以完全相同的方式获取调试信息的程序集。有什么想法吗?
我想在这里补充一点,主要是在我回过头来回顾这个问题时,符号在加载程序集之前不会加载,而程序集在需要之前不会加载。如果断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且会将断点显示为未命中)。
答:
到达断点或使用 后立即开始调试,请使用 .您将看到加载到进程中的所有程序集的列表。找到要获取其调试信息的那个。右键单击它,然后选择符号加载信息。您将看到一个对话框,其中列出了它在其中查找程序集的 .pdb 文件的所有目录。根据实际的 .pdb 位置验证该列表。确保它找不到旧的。Debug > Break All
Debug > Windows > Modules
在正常项目中,程序集及其 .pdb 文件应始终由 IDE 复制到与 .exe 相同的文件夹中,即项目的 bin\Debug 文件夹。如果您一直在玩它,请确保从 GAC 中删除一个。
评论
只是一些简单尝试的东西 - 你可能已经尝试过了。 右键单击解决方案资源管理器中的“解决方案”,单击“清理解决方案”,这将删除与解决方案关联的所有已编译文件和临时文件。
重新生成解决方案,然后再次尝试调试。
我也遇到过解决方案中多个项目的断点问题 - 有些编译为 x86,有些编译为 x64。
评论
您需要在编译器设置中启用“生成调试信息”
我们找到了问题的原因。此代码在 .aspx 文件的 Page 指令中使用“CodeBehind”属性,而不是“CodeFile”属性(ASP.NET 2.0 及更高版本)。经过几天的绝望,一个简单的搜索和替换解决了问题。
取消选中 “启用我的代码” 选项
工具/选项/调试/常规
评论
我在尝试调试 WP7 应用程序的后台代理时遇到了这个问题。事实证明,此调试问题只是实际问题的一个症状:我的后台代理根本没有在调试模式下运行。我遵循了以下有关如何实现后台代理的指南:http://msdn.microsoft.com/en-us/library/hh202941(v=vs.92).aspx
...但忘了添加
#define DEBUG_AGENT
这意味着我的代理从未在调试模式下实际启动。添加此行后,此线程所涉及的问题就消失了。
我正在使用 - 这是我的新手,正在将 C# 应用程序与静态库集成。VS10
我编写了一个托管代码来连接它们。我可以在除 .dll
static lib
我收到了上述消息 - 此文档未加载任何符号。我尝试了上面的许多建议。
我可以看到符号没有被加载。我终于注意到一个复选框 配置调试,启用非托管代码调试。
这允许我在函数中设置断点。static lib
尝试在 Windows 中以管理员身份运行 Visual Studio。
对于 ASP.Net 应用程序,请检查站点的属性,ASP.NET 选项卡。确保选择了正确的 ASP.NET 版本。
检查以确保您不在发布中,而是在调试中。
在调试中时:
首先,尝试通过右键单击项目>重新生成来重新生成项目
如果这不起作用,请尝试清理项目。(right mouse click on the project > clean)
如果这不起作用,请检查以下内容:
- 右键单击您的项目
- 选择[属性]
- 选择 [Build] 选项卡
- 确保选中[定义DEBUG常量]和[定义TRACE常量]
- 确保未选中 [优化代码]
- 点击Build标签页底部的 [高级] 按钮
- 确保 [Debug Info:] 设置为 [full]
- 单击[确定]并重新构建项目;-)
(第 7 步生成文件,这些是调试符号).pdb
评论
.pdb
我也遇到了同样的问题,我在 x86(或 x64)中重建了整个解决方案(包括引用的项目)
尽管我从 Configuration Manager (Build->ConfigManager) 将所有项目设置为 x86,但我的某些项目未设置为 x86。
因此,只是为了确保右键单击项目并遵循
项目 -> 属性 -> “调试”选项卡,验证“配置”和“平台”。
对于发生此错误的某些情况,另一种解决方案是:检查您的生成操作。
我在 asp.net MVC3 项目中遇到了这个问题;由于某种未知原因,我的一个控制器将 Build Action 设置为 EntityDeploy,尽管它应该是 Compile。
我已经完成了清理和重建的事情。那没有用(通常确实如此)。 现在,我在调用服务之前附加到 w3wp,然后让它调用服务一次,命中另一个断点,然后我更改执行点,以便它将再次运行同一行(调用服务),然后它实际上停止在服务方法中的断点。
就我而言,它是一个引用类库项目的 Windows 应用程序 - 我可以调试 Windows 应用程序,但不能调试类库。正在生成 pdb 文件。但是,我确实发现,如果我在调用类库时进行调试,则可以单步执行该库。
有时,即使它给你这个错误,仍然会被击中,所以请忽略这个错误。Breakpoint
这在 Web 应用程序中经常发生,即 .Views
MVC
.cshtml
评论
在将另一个 Web 服务 ASMX 文件复制粘贴到现有 Web 服务中后,我发生了这种情况,在尝试调试最近添加的服务时导致相同的错误,为了能够调试,我不得不在没有调试的情况下启动,然后附加到进程。这很奇怪,但这是我找到能够调试的唯一方法。
检查 bin/Debug 文件夹中是否缺少 .pbd 文件。如果是,请转到项目的“属性”,选择“构建”,然后选择底部的“高级”。在出现的新窗口中,在“调试信息”下选择“完整”。这是我的问题,并为我解决了它。
我在 2013 年推出 ASP.NET 网站时就遇到过这种情况。就我而言,一旦 Web 浏览器完全启动,它似乎就会消失。
尝试在 sharepoint 项目中调试 silverlight 应用程序时出现问题。在项目属性的 sharepoint 选项卡下,必须显式启用对 silverlight 应用程序的调试。否则,您会收到此错误。
如果我们从 获取最新的,所有文件都将处于只读模式。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.
在此目录中的“缓存”符号中设置“您的垃圾桶路径”,然后在“符号”中选择“服务器”。Microsoft
PDB location
单击加载所有符号。这需要时间。然后单击“确定”。
现在,所有程序集的符号状态已从“找不到或打开 PDB”更改为“”。Symbols loaded
评论
我尝试了上面提到的所有方法,但没有任何效果。[清洁溶液,并检查PDB文件等]
即使发布相同的解决方案也无法解决问题。
然后我又回到了我通常要解决的问题(愚弄这个顽固的Visual Studio)
我所做的只是对代码进行有意识的更改并发布解决方案。 然后我恢复了更改并再次发布。
瞧 [PDB 文件摆脱邪灵]..这不是一个聪明的解决方案,但这确实奏效了。:-|
评论
也许你不应该做一个.AutoPostBack
如果您的代码未进行回发,则可能会收到此错误。
最终对我有用的是将配置设置更改为 Release 而不是 Debug,因为编译器似乎跳过了代码,并且最终命中了断点。
我正在使用 IE8 并尝试对一些 JavaScript 文件进行更改。尽管代码正在执行,但它不会在断点处停止,我在断点上收到相同的消息。升级到IE11为我解决了这个问题。
在我的情况下,Visual Studio 加载全局程序集缓存 (GAC) 中的 DLL,而不是我的项目列表中的 DLL。我删除了 GAC 中的 DLL,现在我可以看到断点在工作。
选项“开始调试,调试 + Windows + 模块”在 Microsoft Visual Studio Express 2013 版本中不存在。
取消选中“工具选项调试”中的“使用托管兼容模式”可解决此问题。
在未命中断点的页面中,我选择了文件夹>添加现有项目,然后从其保存路径中选择该页面。这允许断点开始工作。
我只需将“”中的选项设置为“”选项即可修复错误,如随附的屏幕截图所示。Attach to Process
Automatically 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.
评论
给我的:
- 开放式解决方案属性
- 选择“通用属性”/“调试源文件”
- 在“不查找这些源文件”窗口中,删除几乎可以肯定错误地存在的文件。
另一个对我有用的提示。
如果您的项目/库已签名,甚至没有延迟签名,它仍然可能无法调试。尝试禁用签名选项,对其进行调试,然后还原签名选项。
我的同事遇到了这个问题,遵循了与此处类似的步骤,但解决方案与给出的任何这些步骤都不同。
她要调试的代码位于当前项目引用的项目中,并且从未在 Visual Studio 会话中运行。DLL 从 GAC 文件夹运行,在她删除项目根本不会运行后,一旦它尝试运行就会引发异常。解决方案是将引用的项目包含在本地文件夹中。
在 SolutionExplorer 中:
- 选择您将用完的“调试”项目
- 展开“引用”(如果不可见,请选择菜单“项目”,项“显示所有文件”)
- 右键单击断点不起作用的项目,选择“属性”
- 将“复制本地”的值从 False 更改为 True
再试一次。(这对她有用!
Debug
> Windows
> Modules
查看正在加载的模块使我朝着正确的方向前进。
就我而言,IIS Express 似乎正在加载与临时 ASP.NET 文件不同的 DLL。
解决方案是什么?
- 浏览到
C:\Users\<YOUR USER>\AppData\Local\Temp\Temporary ASP.NET Files\vs
- 删除此目录中的所有内容!
选择的答案使我解决了我的问题。但我还需要做一些事情:
即使在下拉列表中选择了“调试”:
在“属性”项目中,>“生成”:
Visual Studio 未将符号加载到特定项目。因此,在该下拉列表中,我选择“Configuration Manager”,并看到我的 Web 项目的设置不正确:
然后我将其设置为“调试”,它开始生成文件。但我需要手动复制 PDB 和 DLL 并放入 VS 正在寻找的文件夹中(这是所选答案帮助我的地方):.pdb
评论
对我来说,另一个解决方案是后期构建无法闯入主项目的 bin 文件夹的项目。
我在WinCE上构建时碰巧遇到了这个问题,似乎“Clean”没有清理设备上的目标文件夹,我通过更改设备上的输出文件夹(项目属性-->设备选项卡-->将输出文件夹更改为之前失败的调试以外的其他文件夹)来恢复调试/中断 - 瞧!!它有效。
可能需要在设备上进行手动清理,但稍后会进行清理。
评论
我要停止调试器的 .dll 以及在 .exe 文件附近复制的关联 .pdb 文件。这些文件的日期较早,所以我认为它们没有在运行时更新。我手动删除了它们,Visual Studio创建了另一对并将这个新对放在.exe附近。现在断点可以工作了!
也许Visual Studio无法复制和替换.exe附近的现有文件(.dll和.pdb),因为那里还有另一个文件。因此,如果我手动删除,那么 VS 可以在 .exe 附近创建一个新的。
我认为问题的根本原因是Visual Studio在运行时使用另一个文件,而不是项目中的文件,并停止。
Qt .pro生成的项目也存在此问题。原来我忘了设置一个环境变量来确定 properties/general/Output Directory。微不足道的,首先要看的,但有时我们错过了显而易见的。
我不小心在文本编辑器中打开了项目文件,它被卸载了。不太可能,但如果你被卡住了,请检查一下。
就我而言,问题出在我的web.config文件上。
它是<compilation debug="false" strict="true"
我把它改成了
<compilation debug="true" strict="false"
.现在我可以调试应用程序了。
如果添加生成后处理以将资源元数据添加到 DLL(公司名称、版本号等),如“rc.exe my_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
我的丢失主要是因为我有 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)
MyProg
并且都将加载调试符号。 不会加载调试符号。MyProg.Web
MyLib.Test
就我而言,我正在编译一个.class library (DLL)
似乎没有加载任何模块,所以我什至无法手动加载符号。Debug -> Modules
我的解决方案是将这一行添加到我的代码中:
System.Diagnostics.Debugger.Launch();
到达此代码后,将触发异常,并显示一个对话框,询问要使用哪个 Visual Studio(即 的新实例 、 的新实例 )来调试程序。.NET Framework
VS 2008
VS 2013
etc
可以选择加载了项目的现有 VS 实例。
这会将进程附加到您的会话并加载所有符号,现在您可以调试您的项目。VS
当然,编译必须使用 Debug 配置完成,而不是 .Release
我个人的情况是,调试在最初创建的 Visual Studio 2013 中工作,但在 2015 年不起作用。 我能够通过将项目文件(.proj)中的版本更改为版本12而不是版本10来解决此问题。
就我而言,在我的项目属性中选中了“优化代码”。这导致 VS 将我的程序集视为“不是我的代码”,反过来,它没有为其加载符号。
项目>属性 > C++ > 常规>调试信息格式 - 程序数据库 (/zi)
我已经在调试>检查了链接器,并且已经在生成调试信息。当我启动应用程序时,加载了符号(调试> Windows > 模块)。设置调试信息格式为我解决了这个问题。希望这对某人有所帮助!
主项目同时具有对同一项目的项目引用和文件引用。
就我而言,主项目有两个引用,一个是项目引用,另一个是文件引用,指向同一项目生成的 dll。
因此,pdb 文件未复制到主项目的 bin 文件夹,导致符号不可用。
就我而言,在文件中,有以下一行,我对其进行了评论,一切都是正确的:AssemblyInfo.cs
[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
对我来说,问题只是我试图在一个未设置为启动项目的 Web 项目中进行调试。 因此,在运行调试时,它没有很好地编译,并且.pdb不是最新的。
只需将项目设置为“设置为启动项目”即可。
有时,IIS 会出于某种原因保留文件。我不得不删除网站并重新创建它,问题就消失了
问题是我的符号是从项目的虚拟目录路径中引入的......它被映射到其他项目的虚拟目录......应该在模块中加载的 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
我最终将我的问题追溯到使用多个 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。
- 清洁解决方案
这花了我一段时间尝试了上面的其他选项,但由于某种奇怪的原因,调试停止了工作。
工具 -> 选项 -> 调试 -> 常规 -> (取消勾选) “要求源文件与原始版本完全匹配”选项
通常,我们的应用程序在特定的 common/app 目录中引用 .dll,如下所示:C:\OurCompanyApps\xxxxxx.dll。这发生在一个包含一堆 WinForm 和 .dll 项目的解决方案中。.dll 项目编译为 C:\OurCompanyApps\,WinForm 项目引用该位置中已编译的 .dll 文件。
问题:我发现有问题的应用程序引用了源代码管理 bin\Debug 位置中的 .dll 项目,而不是 C:\OurCompanyApps 中已编译的 .dll 文件。
解决方案:我删除了引用,然后从 C:\OurCompanyApps\ 位置重新添加它。然后,我可以单步执行我在 .dll 代码中添加的断点。
还值得一提的是,在某些情况下会出现问题,因为要调试的项目是外部服务。在这种情况下,必须将调试器附加到正在运行的进程。
对于我的 Xamarin 应用程序,在我完全擦除源代码管理文件夹、执行“获取最新”并重新生成解决方案后,它终于开始调试。
就我而言,这是因为我的发布配置文件(发布到本地 IIS 站点)以某种方式设置为“发布配置”,尽管全局生成配置设置为“调试”。将发布配置文件修改为调试配置为我解决了这个问题。
从 Visual Studio 2017 15.3.1 到 15.3.5 开始,出现了解决此问题的新方法。如果使用的是 EditorConfig,则 charset=utf8 选项会导致这些症状。VS 团队已经复制了这一点,并表示他们正在努力。
因此,一种解决方法是在 .editorconfig 文件中注释掉 charset=utf8 行。
自 2017 年 10 月 9 日起,状态现在为“已修复 - 待发布”。
(感谢 John Hatton,“当前不会命中断点。源代码与原始版本不同。这是什么意思?
就我而言,这是在 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
就我而言,我正在使用 Visual Studio 的实验实例调试 WPF 扩展。在开始调试然后暂停 dubugger 后,我打开了窗口。在那里,我可以看到Visual Studio尝试加载符号的目录。停止调试后,我使用 Windows 资源管理器删除了目标文件夹并重新启动了调试器。然后,Visual Studio 能够命中断点。Debug > Windows > Modules
C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\15.0_76a9e536Exp\Extensions\<companyName>
就我而言,我在方法调用中给出了 F11,强制输入问题 BP 所在的方法,因此断点被恢复。
另一种解决方案是确保您的代码是可访问的。例如:
在函数的 Return 之后添加的任何代码。 添加一个 GOTO,该 GOTO 可有效跳过具有断点的代码。
我并不是说这些是正常的,但它们也是原因。
如果同时具有 C# 和本机代码 (C/C++),请确保为项目启用本机调试:
1. 右键单击解决方案资源管理器
中的启动项目 2.选择“属性
3”。选择“调试”选项卡
4。确保已启用本机代码调试
通过启动外部应用程序来调试程序集时,需要注意一些额外的事项:
外部应用可以从清单文件加载自己的程序集 (DLL) 副本。(例如,文件)如果是这样,您需要通过手动更改清单来禁用此功能。
appname.exe.manifest
外部应用可能只是尝试从其自己的文件夹中的 DLL 加载,即使没有清单也是如此。您必须删除/重命名它们。
完成这些步骤后,调试器中运行的程序集版本应正确加载,并且可以正常调试。
就我而言,这些解决方案都没有奏效。我不得不去
工具 -> 导入和导出设置 -> 重置所有设置。
然后调试开始工作,没有任何问题。
我认为如果出现此错误,则源是调试符号在构建发布后很难出现在解决方案中。
我尝试了所有其他答案 - 通常,重新生成.pdb符号或检查其位置,清理和重建项目,确保活动配置不是发布等。
最终对我有用的是右键单击解决方案资源管理器中的项目,>调试>启动新实例。
评论
以下步骤对我有用:
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.
现在,您可以再次开始调试。
在尝试了一堆这些之后,最终对我有用的东西是这样的:
在 中,取消选中 。Debug > Options > General
Enable Edit and Continue
评论
如果您使用的是 C++ 项目或 C# 或任何 .NET 项目中的 DLL,并且想要调试到本机代码中。然后转到“.NET 项目属性”->“调试”-“启用本机代码调试”>将其设置为 true)。
我遇到了同样的问题,检查了之前的所有解决方案,但对我不起作用。简单但添加的答案只是为了确保人们不会像我一样陷入这个不存在的问题。
对我有用的是,我在管理员模式下运行 VS 2013,在正常模式下运行可以解决问题。尝试多次切换到正常和管理模式,并且始终工作正常。
- IDE:VS 2013 专业版
- 版本: 12.0.40629.00 Update 5
检查以下两个设置是否在 Visual Studio 中相同:
右键单击测试项目,转到“属性”和“生成”选项卡,然后查看“平台目标”
我的都设置为“任何 CPU”,所以 x64
在主菜单栏上,依次转到“测试”、“测试设置”、“默认处理器体系结构”
我的设置为 X86
将其更改为 X64 以匹配上述设置,使内置的 Visual Studio 菜单“调试测试”正常工作,并命中以前忽略的断点,并显示消息“当前不会命中断点。本文档未加载任何符号”。
更新:
对于 Visual Studio 2019,菜单已移动了一点:
我的问题是aspx,aspx.vb和aspx.designer.vb文件导入错误(也许它们被一个接一个地导入到项目中)。
断点位于 aspx.vb 中,但无法访问,并且有此问题的警告。
解决方案是删除这三个文件并重新导入它们。现在我可以到达断点了。
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
我测试了这个问题的所有答案都不适合我,我使用以下方法:
我排除了该文件具有来自项目的断点,其中视觉对象 工作室无法击中它们,然后我将它们包含在我的项目中并且 工作断点。
我是这样解决的: 运行项目。 转到“调试”->“Windows”->模块 选择要调试的库,然后右键单击它。选择 -> “Load Symbols” 然后将“跳过加载 suymbols”更改为“加载符号”。
右键单击项目 -> 属性 -> Web 选项卡
在“服务器”部分,我更改了本地 IIS 的 IIExpress,创建了虚拟目录,瞧!
检查 csproj 文件中是否有一行/条目,如果存在,请尝试将其删除并再次尝试调试<DebugType>Full</DebugType>
确保引用的是正确的类。
就我而言,我有一个游戏对象,我在其中向组件添加了错误的脚本。因此,Visual Studio 无法实际访问代码。
我只需要删除错误的 C# 脚本和组件并添加正确的脚本和组件。
也许我可以添加一些新的东西。除非我在这许多帖子中遗漏了某些内容(可能!),否则似乎没有公认的解决方案,也没有提到 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上打开它)。
我的经验是尝试远程调试我部署到 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 环境更麻烦。
我在 Visual Studio 2019 社区和 Asp.net Web 窗体项目中遇到了同样的问题。我花了 1.5 天,这 30 个答案中的任何一个都解决了我的问题。最后,我运行Visual Studio安装程序exe并选择修复选项。所以我的配置被重置了,问题完全消失了。
UWP:
如果要调试通用 Windows 项目 [UWP],则该过程类似于使用混合 C# 和本机代码的解决方案。 除非需要将“应用程序进程”或“后台任务进程”调试器设置为“仅托管”才能调试 C# 代码。
- 右键单击“解决方案资源管理器”中的“启动项目”
- 选择“属性”
- 选择“调试”选项卡
- 将进程调试器类型设置为“仅托管”
就我而言,问题是我添加了一个新项目/组件,而我忘记了签名。当解决方案中的其他组件被签名时,你的新组件也需要签名。所以对我来说的解决方案是将 snk 文件(从另一个项目)复制到新的项目文件夹中,然后从项目属性/签名中选择它。
另一个问题可能是,如果团队使用不同版本的 VS,或者有人使用 Rider 和某些 VS,他们可能会在项目 GUID 上使用不同的大小写。
我的情况是 Visual Studio 2019,我们有 C# 和 C++ 代码。不知道我搞砸了什么,但解决方案是在 C# 代码工作时从 auto 更改为 Native。
debug -> attach to process...以及它在哪里说 附加到:选择本机代码(在我的情况下)。找到有问题的过程,瞧。
如果您发现上述解决方案都不起作用,请尝试此操作。
右键单击“项目”->“属性”->“生成”-“高级”>”。 将调试信息从“无”更改为“仅 Pbd”或“完整”
我通过以下方式解决了这个确切的问题:
1. Open studio as administrator
2. Use Build->Clean Solution
3. Use Build->Build
转到项目的属性,然后转到“构建”选项卡。 单击“高级...”并将“调试信息”更改为“完整”
就我而言,是一个名为 Strong Namer 的包包含在另一个 Nuget 中,导致了问题。删除 Strong Namer 解决了该问题。
或者,特别是当依赖于强名称包时,使用强名称密钥对项目进行签名也可以解决问题。
左边的字段答案在这里。我有一个包含几个项目的解决方案,并且由于它们具有相同的端口号,Visual Studio 启动了错误的项目。所以是的,我的断点没有加载调试符号......
我设法最终得到了一个具有相同类的文件的两个副本。两者都在 Visual Studio 中打开,但它们具有不同的文件名,一个实际上包含在项目中,另一个未包含在项目中。
确保要设置的断点位于解决方案/项目实际编译的文件中。未编译的文件没有符号。
我有一个 ASP.NET 项目遇到了这个问题。似乎涉及一些临时文件,并且项目加载的是旧文件,而不是当前文件。更改解决方案的文件夹名称解决了此问题。
- 通过在下拉菜单中选择来确保您在里面而不是在里面,如下图所示。
Debug
release
debug
- 然后,尝试清理项目,方法是在解决方案资源管理器窗口中单击鼠标右键,然后选择 。
Clean solution
- 然后,通过在解决方案资源管理器窗口中单击鼠标右键来重新生成解决方案,然后选择
Rebuild solution
我有一个 blazor webassembly 项目,几乎尝试了答案中的所有内容,但没有任何效果,解决方案是使用 Chrome 而不是 Firefox,并且到达了断点。此外,blazor webassembly 的文档说了以下内容
Visual Studio 需要“常规”>“工具”>“选项”>“调试”中的“为 ASP.NET(Chrome、Edge 和 IE)启用 JavaScript 调试”选项。这是 Visual Studio 的默认设置。如果调试不起作用,请确认已选择该选项。
有人在我的 Blazor 项目中更改为。"launchBrowser": true
"launchBrowser": false
launchSettings.json
它确实启动了一个浏览器,但没有导致断点。所以我不确定launchBrowser到底是做什么的。
我花了 4 个多小时才发现!在此处添加它以防万一它可能会为某人节省一些时间!
如果解决方案中有多个项目,则可能是正在调试的项目/断点未设置为“启动项目”。就我而言,我正在从同一解决方案中的其他项目调用 Web 服务,因此该 Web 服务不是启动项目,并且 brfeakpoint 没有命中。我将 ws 设置为启动项目,并启动了调用项目的新实例。它对我有用。
对于那些使用 ASP.Net(框架)WSP应用程序的人来说,又是一个答案。
我可以让 VS 正确调试的唯一方法是确保在您的 web.config 行中:debug="true"
compilation
<compilation debug="true">
对于那些可能发现这些解决方案中的任何一个都不起作用的人,这可能会有所帮助: 我犯了一个错误,在我的web.config中将其添加到connectionString中:
server=localhost; port=####
这导致调试停止,我删除了它并修复了它
尽管 w3wp.exe 经常出现断点问题,但对“未加载的符号”完全感到困惑。
最后,原因是我在另一个位置有一个禁用的断点(有时使用禁用的断点作为书签)。删除它后,断点再次变为红色。添加另一个禁用的断点并删除它不会使问题再次出现。
这就解释了为什么通常唯一的解决方案是删除 .vs 缓存(矫枉过正且乏味),然后删除禁用的断点。
我在 AutoCAD 项目中遇到了这个问题 Vb.net,但上述解决方案都不适合我。事实证明,我尝试运行的dll已经加载到AutoCAD dll文件夹中。当我运行将调用所述DLL的命令时,这会导致冲突。我的解决方案是从我的Autocad dll文件夹中删除dll,然后使用我的项目文件夹中的dll运行它。这解决了这个问题。
我尝试了所有方法,发现在我的情况下,解决方案是:
- 工具 / 选项 / 调试 / Just-In-Time
- “托管”选项未被选中,检查后断点就像一个魅力。
我重置了Visual Studio的设置,然后,当我执行一个项目时,它显示断点,就像禁用一样。
解决方案:项目在发布模式下运行,您可以切换到调试。
评论