【问题标题】:How do I debug across application restarts in Visual Studio?如何在 Visual Studio 中跨应用程序重新启动进行调试?
【发布时间】:2017-07-12 16:34:17
【问题描述】:

我正在 Visual Studio 2010 中构建 Visual Basic 应用程序。我的某些选项只能在重新启动应用程序时应用。

当应用程序正常运行时,我没有遇到过一次崩溃。当我应用设置,手动退出并重新启动时,它也不会崩溃。另一方面,当我尝试从应用程序自动重启时,我会在 5-10 次重启中出现异常。

我已尝试运行调试器,但一旦应用程序重新启动,Visual Studio 调试器就会关闭,并且在应用程序再次启动时不会重新打开。它也不会以相同的配置再次启动。看来调试器启动的应用配置和手动启动的应用配置文件是不一样的。

有没有办法解决这个问题?在重新启动时保持调试器处于开启状态?还是我应该采取不同的策略?

【问题讨论】:

  • 出于好奇,您为什么要运行 Visual Studio 2010?
  • 我不太相信微软在 2013 年之后推出的任何东西。我的应用程序针对的是 Windows 7 及更低版本,因此没有必要获得 VS 2013+。
  • 仅提高生活质量就值得了。至于您的问题,this 应该向您展示如何在启动时附加到进程。
  • 生活质量是什么意思?就像后来的 VS 更容易使用、设计更好、错误更少?感谢您的链接,我将通读它。 :)

标签: vb.net visual-studio visual-studio-2010 visual-studio-debugging


【解决方案1】:

方法 1:从应用程序中附加调试器

如果应用程序有时在启动时崩溃,请在应用程序的 Startup event 中添加对 Debugger.Launch() 的调用。这样做会导致 Visual Studio 打开一个窗口,您可以在其中选择附加其调试器。

您可以检查Debugger.IsAttached property 以确定是否已附加调试器。

订阅Startup事件的步骤:

  1. Solution Explorer 中右键单击您的项目,然后按Properties

  2. 转到Application 标签。

  3. View Application Events

  4. 在左侧组合框中选择MyApplication (events)

  5. 在右侧组合框中选择Startup

代码:

Imports System.Diagnostics

...

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
    If Debugger.IsAttached = False Then
        Debugger.Launch()
    End If
End Sub

方法 2:让 Windows 启动调试器,进而启动您的应用程序

另一种解决方案是将您的应用程序添加到 Image File Execution Options 注册表项,这样您就可以指定应该为您启动应用程序的调试器。

注意:将您的应用程序添加到图像文件执行选项会导致 Windows 自动启动指定的调试器改为每当您尝试打开应用程序时。您的应用程序的路径作为命令行参数传递,然后由调试器来启动您的应用程序,并将其自身附加到它。

Malwarebytes 在他们的博客上有一些关于图像文件执行选项的信息:An introduction to Image File Execution Options

你会这样做:

  1. 打开Regedit

  2. 导航到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 键。

  3. 找到带有应用程序名称的密钥(如果存在),或以yourApplicationName.exe 的格式创建一个新密钥。

  4. 创建一个新的String 值(REG_SZ)并将其命名为debugger

  5. debugger的值设置为vsjitdebugger.exe

  6. 开始调试吧!

更多信息请见:How to: Launch the Debugger Automatically - MSDN

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多