【问题标题】:Visual Studio debugging run ignores stepping and breakpoints and executes indefinitelyVisual Studio 调试运行忽略单步执行和断点并无限期执行
【发布时间】:2017-05-11 13:20:03
【问题描述】:

一段时间以来,我一直在努力解决 Visual Studio 2017 中的一个奇怪问题,但在任何地方都找不到有关它的任何信息。

我目前正在将一个大型遗留应用程序从 .NET 3.5 重构和升级到 .NET 4.6.1。它在 .NET 3.5 中完美执行,但在没有调试器的情况下使用 .NET 4.0 或更高版本作为目标框架执行时会引发错误。

为了调试它,我通过 Visual Studio 在调试模式下运行程序。在调试模式下运行时,尽管诊断工具显示程序活动,但在达到某个类后会忽略单步执行和断点。

Diagnostic Tool

如果不调用被称为 MainMenuForm(并且职责太多)的类,问题就会消失。是调用非静态 MainMenuForm 类中的静态字段还是调用构造函数都没有关系。

我怀疑这个问题与 JIT 编译器发现一些奇怪的东西有关,但预计会引发异常或某种错误。

有没有人在升级到新版本时遇到过类似的问题?

【问题讨论】:

  • 假设应用程序由许多程序集组成,是否所有程序集都针对同一个框架并设置为在调试中作为目标运行?
  • 确保您已经卸载并清理了以前的版本。这种行为通常意味着正在使用的 DLL 不是您刚刚编译的那个,而是另一个(一个简单的新消息框将确认它)。
  • 感谢您的意见。所有 19 个项目都针对相同的框架,并设置为在调试中运行。然而,犯罪者类文件中使用了一些第三方依赖项。我认为 .NET 是向后兼容的,这不会造成问题。但是我会尝试看看如果我一一消除第三方依赖会发生什么。我试图清理解决方案并手动删除 bin 和 obj 文件夹,但这没有帮助
  • @Excavator,您说您从.net 3.5 更新了这个应用程序,是否意味着这个项目是在旧VS 版本中创建的?如果是这样,您在 VS2017 中打开它时是否收到任何警告或错误?不调试您的应用程序,如果您只是构建它或使用“不调试启动(Ctrl + F5)”运行它,是否会收到任何编译错误?您的解决方案中有19个项目,是否与具体项目相关?如果使用“start without debug”运行没有报错,请开启调试菜单下的异常设置,重新调试。
  • 好问题。这些项目是在 Visual Studio 2008 中创建的,但是当框架设置为 3.5 或更早版本时,它们可以在 Visual Studio 2017 中完美运行。除了迁移旧解决方案之外,我还创建了一个新解决方案并粘贴了所有源代码。这并没有改变任何东西,因此迁移工具显然非常有效。该应用程序在 3.5 和不带调试器的情况下都能完美地通过 VS2017 运行,但在没有调试器的情况下会引发错误并在 4.0 及更高版本中被调试器卡住。与问题相关的所有代码都在一个项目中。

标签: c# visual-studio debugging upgrade


【解决方案1】:

我找到了解决方案。根据 Snympi 和 JGH 的输入,我开始研究问题类的依赖关系。事实证明,它有一个遗留的 DirectX 依赖项,显然 CLR 4.0 对它的处理方式有所不同。

这篇文章的答案解决了这个问题: Managed DirectX running from .Net Framework 4.0 app dont hunt

将以下内容添加到 App.config 使调试器能够单步执行程序。

<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup>

【讨论】:

  • 很高兴知道您已经解决了这个问题,如果是,您可以将其标记为答案:)
猜你喜欢
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多