繁体   English   中英

如何在没有UserInteractive模式的情况下进行调试(例如,服务)

[英]How to Debug without UserInteractive mode (e.g. Services)

在Visual Studio中进行调试时是否可以模拟非UserInteractive模式?

我有一个要调试的正在运行的服务,但是根据我是调试它还是运行该服务,其行为是不同的。

我发现了这个问题:

如何在Visual Studio中调试Windows服务?

那里的答案对我而言并没有做到这一点,因为在调试之后,调试器将以UserInteractive模式运行该进程。 我想要的是调试器,用于调试过程,但没有UserInteractive模式。

例如,我有一个错误被深深地埋在了代码中,因为它使用的库试图显示某种对话框(即使用户看不到该对话框)。 由于使用了UserInteractive模式,因此无法在Debug中进行选择。 我希望能够对此类问题进行更多调试

要调试服务,您需要

  1. 在调试配置中构建服务

  2. 安装服务以查看如何执行此操作,请转至此链接https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-install-and-uninstall-services

  3. 从服务控制管理器,服务器资源管理器甚至甚至从代码启动服务,如果您想知道如何执行此操作,请转到此链接https://docs.microsoft.com/zh-cn/dotnet/framework/windows服务/如何启动服务

  4. 以管理员身份启动Visual Studio,以便可以附加到系统进程。

  5. 可选>在Visual Studio菜单栏上,依次选择“工具”,“选项”。 在选项对话框中,选择调试符号,然后选择“ Microsoft符号服务器”复选框,然后选择“确定”按钮

  6. 在菜单栏上,从“调试”或“工具”菜单中选择“附加到进程”以进行快捷键,请按CTRL + ALT + P

出现过程对话框

  1. 然后选中“从所有用户显示过程”复选框

  2. 在可用过程部分中,选择您的服务过程,然后选择附加

希望这可以帮助

我讨厌从Visual Studio附加到进程。 它可以工作,但似乎还需要花费很多时间才能建立可供选择的过程列表。 也许是因为我们的系统锁定得太紧了。 在不同的环境中,这完全有可能正常工作。

不过,我发现仅在服务启动时触发编程断点并在开始时跳入调试要容易得多。 为此,请在OnStart()回调中调用以下代码:

System.Diagnostics.Debugger.Break();

当您启动服务时,您应该得到一个提示,指示发生了未处理的异常。

在此处输入图片说明

单击“是”选项,对UAC提示回答“是”,选择要使用的Visual Studio实例,然后在Visual Studio启动后正常进行调试。

完成调试后,只需停止服务,调试器将自动退出。 但是,请不要关闭该Visual Studio实例。 进行服务所需的任何更改,然后重新构建。 然后,当您重新启动该服务并到达选择要使用的Visual Studio实例时,它将在列表中包括您的原始调试实例。 与每次创建一个新实例相比,跳回到那个实例要快得多。

高温超导

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM