【问题标题】:The application is in break mode - Unable to determine cause应用程序处于中断模式 - 无法确定原因
【发布时间】:2017-09-07 18:31:07
【问题描述】:

我的应用程序终止时,IDE 有时会中断。

发生这种情况时,调用堆栈为空,并且线程列表显示了一些不会向我透露任何信息的线程。

当我选择“调试器”-“步入”时,IDE 退出/终端看似正常,所以我不知道如何进一步调查导致中断的原因。

单击“检查正在运行的任务”不会显示任何任务。 单击“继续执行”似乎可以正常退出调试。 单击“显示诊断工具”显示事件“执行时停止:执行时停止”,它不再告诉我了。

附上截图。

如何调查导致此中断的原因?

编辑: 我已经尝试过一位论坛成员的建议,但我认为这不会产生任何对我有帮助的东西。这是截图:

【问题讨论】:

  • 请查看任务管理器,检查调试工具/本项目相关的某些进程是否没有关闭,您可以关闭它们,然后查看调试结果,或者重启您的机器,重新打开项目,再次调试。确保并在构建下运行“干净”,否则您可能会遇到某些编译错误或异常。
  • @JackZhai-MSFT 请详细说明我应该做什么。
  • 看起来很不健康。终结器线程不再运行,但仍有三个线程运行托管代码。不好。 Crystal ball 说您注意到程序终止时的两秒超时,这表明终结器线程已死锁。您有充分的理由联系您的组件供应商的支持,Essential Objects 的业务是提供可能导致终结器线程死锁的风险代码。
  • 当我遇到 类似 问题时,我的问题原来是线程方法上被遗忘的断点。在运行您的应用程序之前禁用所有断点可以证明或反驳这个理论。不记得我的断点是否在引用的项目中,但肯定是相关的。

标签: vb.net debugging ide visual-studio-2017


【解决方案1】:

如果发生异常的代码是库的一部分或不是您编写的其他代码,您可能无法看到发生异常的代码。以下可能会有所帮助:

调试 > 选项 > 常规 > 取消选中“仅启用我的代码”

【讨论】:

    【解决方案2】:

    在我的一个 Web 应用程序中,我遇到了同样的问题,为了找出问题所在,在搜索了类似问题后,大多数人建议更改我的调试选项。所以在调试选项中,总的来说,我标记了第二个选项“当一个进程中断时中断所有进程”,几乎在底部,“启用本机编辑并继续”; “应用更改并继续”。

    有了这个,我的应用程序终于停止了我遇到的问题(ajax 不喜欢的字符串中的非法字符)并且能够评估值并找出问题所在,随时编辑代码直到它工作. 这是我的调试器选项的屏幕截图。 希望你能抓住你的错误:)

    Debugger options

    【讨论】:

    • 我现在有相同的调试器选项,但不幸的是这并没有帮助。我只是没有进入发生异常的地方。我无法找出导致问题的 COM 对象。
    • 你说的是当你终止应用程序时,如何将进程/进程放在一个或多个 Try/catch 方法中,看看它是否被异常捕获?
    【解决方案3】:

    我没有找到任何实际调试问题的方法。 我用蛮力的方式解决了这个问题:

    我一一删除了所有程序集和 COM 对象,直到错误消失。

    就我而言,我在模块中有一个带有 WithEvents 的公共控件。 似乎 VB.NET 根本不喜欢这样。 从现在开始,我将把控件及其withevent放在一个表单中。

    然而,主要问题仍然存在:Visual Studio 没有提供任何帮助来轻松隔离问题。

    【讨论】:

      【解决方案4】:

      当您在调试器中时,您可以导航到监视窗口并使用伪变量来显示有关根本原因的一些信息。一个特别有用的是$exception

      查看有关pseudovariables的文档。

      【讨论】:

      • 当问题发生时,IDE 告诉我“无法计算表达式。”。我已经用它的屏幕截图更新了我的帖子。
      • 在 Visual Studio 的右侧点击“Stop at Exception”是否没有信息?
      • 没有。如果我点击它,什么都不会发生。当我将鼠标悬停在它上面时,会显示消息“调试器捕获到异常,并且用户设置表明应该发生中断”。我已经编辑了我的帖子以显示这一点。
      【解决方案5】:

      转到异常设置并取消选中“Magaged Debugging Assistants”

      【讨论】:

      • 这有什么帮助?
      【解决方案6】:

      这可能是因为某些方法或构造函数不可访问(私有或内部),请将其设为公共。

      XAML 需要调用方法来启动应用程序

      【讨论】:

        【解决方案7】:

        当单线程 Winforms 应用程序需要超过 60 秒才能完成主线程中的操作时,也会发生这种情况。

        我以肮脏的方式解决了这个问题,在太长的处理过程中,定期从主线程调用 Application.DoEvents()。 Application.DoEvents 调用之间发生的异常在 IDE 中得到正确处理。

        【讨论】:

        • 这种行为是否记录在任何地方?
        【解决方案8】:

        这只是在调试模式下运行程序时的警告消息。 如果您更改为“发布”模式,您将不会再看到此消息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-15
          • 2017-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-22
          • 2015-01-18
          相关资源
          最近更新 更多