Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 使用VS2012远程调试Windows服务_Visual Studio_Windows Services_Remote Debugging - Fatal编程技术网

Visual studio 使用VS2012远程调试Windows服务

Visual studio 使用VS2012远程调试Windows服务,visual-studio,windows-services,remote-debugging,Visual Studio,Windows Services,Remote Debugging,在发布这个问题之前,我试图找到答案。我在另一台机器上运行windows服务。我用C#编写了服务,服务可执行文件运行的目录包含可执行文件和调试文件(.pdb)。我第一次尝试使用VS 2012远程调试远程调试服务。我能够成功地连接到服务流程。然而,由于这是我第一次,我不确定下一步能做什么。我单击了暂停按钮,这会在ServiceBase.Run(ServicesToRun)行上暂停服务,这对我没有多大用处。该服务有一个计时器,它每30秒启动一次,并将在计时器事件中运行代码 我的问题是。。。在这种情况下

在发布这个问题之前,我试图找到答案。我在另一台机器上运行windows服务。我用C#编写了服务,服务可执行文件运行的目录包含可执行文件和调试文件(.pdb)。我第一次尝试使用VS 2012远程调试远程调试服务。我能够成功地连接到服务流程。然而,由于这是我第一次,我不确定下一步能做什么。我单击了暂停按钮,这会在ServiceBase.Run(ServicesToRun)行上暂停服务,这对我没有多大用处。该服务有一个计时器,它每30秒启动一次,并将在计时器事件中运行代码

我的问题是。。。在这种情况下,是否有一种方法可以使用调试器单步执行代码。 我是否需要在我的代码库中已经有一些特定于调试的代码,这样当调试器附加时,它会将我带到代码中的某个位置,从那里我可以单步执行代码

谢谢,
Andrew。

有几种方法可以调试已开发的远程应用程序或windows服务。如果您在您的机器(本地)中,那么调试将非常简单

System.Diagnostics.Debugger.Launch();
但由于您在不同的机器中,这取决于两台机器的连接方式。这意味着您在调试远程应用程序/服务时有一些限制

通过快速搜索,我得到了以下结果,似乎对你有帮助

您可以使用visual studio用于连接到远程设备并进行调试的远程调试监视器。你可以在这里有一个明确的指示

还有另一个工具可以让您在正确设置后调试远程应用程序。但它有一些限制或条件,你必须遵守

这是名为远程工具的工具,您可以在MSDN上找到详细的设置过程

关于使用此工具的先决条件,已在此处明确引用。但我还是要重新措辞,以便于快速评论

使用Visual Studio远程工具的先决条件
    在远程设备上调试:

  • 远程设备和Visual Studio计算机必须通过网络连接或通过以太网电缆直接连接不支持通过internet进行调试

  • 远程设备必须运行Visual Studio 2012远程工具

  • 您必须是管理员才能在远程设备上安装远程工具。要与远程工具通信,您必须具有远程设备的用户访问权限

如果您找到了更好、有效的解决方案,请随时与他人分享。

谢谢您的回复。它提醒我在这里为像我这样的人发布我的解决方案

解决方案很简单(一旦你知道它,它总是很简单)

确保在目标计算机上运行的代码与在Visual Studio中打开的代码相同。它必须是相同的程序集和版本,否则调试器将不会命中断点。确保在希望调试器中断执行的位置设置了断点。然后连接到目标机器进程,等待计时器启动并运行设置断点的进程

希望这有帮助

Andrew.

如何“连接到目标机器进程”?