为什么我的C#调试器会跳过断点?

时间:2009-07-29 09:41:24

标签: c# .net debugging

我的C#调试器无法正常工作。它有时会跳过断点和代码行。我检查了配置管理器。我甚至尝试将我的项目添加到新的解决方案文件中。有人可以帮助我吗?

11 个答案:

答案 0 :(得分:26)

我的调试清单:

  • 确保使用正确的代码类型附加到流程 - 如果您的流程同时具有非托管代码和托管代码,则不依赖“auto”为您工作,明确说明您尝试调试的代码类型
  • 转到模块窗口(调试 - > Windows - >模块,您可能需要在“自定义...”菜单中启用它
  • 检查以确保已加载试图调试的程序集,并且已加载符号 - 如果尚未加载,则右键单击该模块并选择“加载符号”
  • 打开您的代码文件并放置您的断点 - 如果它出现时带有小警告符号,那么看看它说的是什么,
  • 您可能需要转到“工具 - >选项 - >调试 - >常规”并取消选中“启用我的代码(仅管理)”
  • 您可能还想取消选中“要求源文件与原始版本完全匹配”,如果您认为您的来源可能略有不同(请注意,因为这可能会导致您使用完全错误的来源进行调试,这可能是非常混乱)

在某些情况下,您可能会发现在附加调试器的位置没有加载模块(例如,如果您有某种插件archetecutre,并且插件程序集仅在您第一次使用时加载) 。在这些情况下,您所能做的就是尝试确保在加载模块时准备好所有内容。

答案 1 :(得分:10)

确保禁用优化(这是Debug配置的defaut,但它们在Release配置中启用)。编译器优化可能会破坏调试器......

答案 2 :(得分:5)

你确定它编译正确吗?听起来像你正在调试以前的版本,如果构建失败可能会发生这种情况(可能是代码错误,也许文件是只读的)。

答案 3 :(得分:2)

如果要跳过整个方法,请查看源代码并查看是否存在System.Diagnostics.DebuggerStepThroughAttribute属性。

尽管有这个名字,它仍然可以通过该方法来阻止调试器。

答案 4 :(得分:2)

这在VS 2017中适用于我,转到工具>然后在选项窗口下的选项转到调试部分。启用 - “启用.NET Framework源步进”

答案 5 :(得分:1)

这听起来像您的源代码与PDB文件不同步。最简单的解决方案是清理解决方案(从bin文件夹中删除所有dll)。重新编译,然后再尝试单步执行。

如果仍然失败,请尝试关闭解决方案并删除“obj”文件夹。然后再试一次。

还要检查你是否正在编译调试模式 - 这是我经常做的事情(“为什么它不是单步执行?!”) 没有得到突破点

答案 6 :(得分:1)

如果至少有时会触发断点,则表示所有设置都可能正常。

缺少的命中可能是由一些副作用引起的,例如:调试器的属性评估(至少VS在调试器的属性评估期间跳过断点)或一些间谍工具(但这些通常由调试器捕获)

如果您认为可能出现这种情况,请关闭间谍工具和disable the property evaluation by the debugger

这有时可能不够,例如:如果您的属性返回一个集合,则显示例如: Count()将评估该属性 - 因此还要从监视窗口中删除所有属性引用等。

答案 7 :(得分:1)

禁用“项目属性/构建/优化代码”对我有用。

答案 8 :(得分:1)

还请确保您要调试的代码与主可执行文件在同一进程中运行。我只是浪费了一个半小时才弄清楚一个原因-断点没有命中,因为感兴趣的代码是在子进程中旋转的,而不是直接调用的(有问题的程序具有两种不同的操作模式)。

答案 9 :(得分:0)

如果您遇到这种错误:

当前的.NET SDK不支持定位.NET Core 2.1。目标.NET Core 2.0或更低版本,或者使用支持.NET Core 2.1的.NET SDK版本。 DCR_Parser

在解决方案资源管理器中右键单击该项目,然后单击“属性”。在“应用程序”选项卡下,转到“目标框架.NET Core 2.0”。并保存。

答案 10 :(得分:0)

@Justin的回答超级有帮助。我将一件事添加到列表中。

  • 检查以确保您正在调试中运行,并且您的调试首选项未选中“优化代码”。见下文:

General run setting Debug Settings Release Settings