.net 如何调试正在运行的进程?

.net 如何调试正在运行的进程?,.net,debugging,.net,Debugging,我有一个正在运行的进程,它早就应该完成了。它已经运行了13个小时,我希望它能在几小时内完成。它曾多次成功运行 也许它只是处理大量的数据,所以我不想只是在中间停止它,只要它正当地需要这么多的时间,它几乎已经完成了。 我如何附加到流程,以查看它是否只是坐在那里,还是实际上正在处理?我是否可以打断一下,看看它在哪一行,并计算到目前为止它处理了多少条记录 我安装了windbg,但我不确定这是否是正确的工具。如果需要,我也有此应用程序的源代码。您可以使用Visual Studio 打开项目的解决方案,从“

我有一个正在运行的进程,它早就应该完成了。它已经运行了13个小时,我希望它能在几小时内完成。它曾多次成功运行

也许它只是处理大量的数据,所以我不想只是在中间停止它,只要它正当地需要这么多的时间,它几乎已经完成了。 我如何附加到流程,以查看它是否只是坐在那里,还是实际上正在处理?我是否可以打断一下,看看它在哪一行,并计算到目前为止它处理了多少条记录


我安装了windbg,但我不确定这是否是正确的工具。如果需要,我也有此应用程序的源代码。

您可以使用Visual Studio


打开项目的解决方案,从“调试”菜单中选择“附加到进程”。

您可以使用Visual Studio


打开项目的解决方案,从“调试”菜单中选择“附加到进程”。

如果无法使用visual studio,则可以使用远程调试。您仍然需要安装,但这是一个小型安装,不需要重新启动afair。如果您不能使用visual studio,则可以使用远程调试。您仍然需要安装,但这是一个小的安装,不需要重新启动afair

您说您已经安装了windbg,但我不确定您的意思是在您的开发机器上还是在运行长时间运行的进程的机器上。如果是后者,并且由于这是一个.NET进程,windbg和进程的位数必须匹配,例如32位windbg调试32位.NET进程或64位windbg调试64位进程。确定进程的位后,将匹配windbg的位附加到进程文件|附加到进程

然后使用.symfix;修复符号路径;。重新装载

接下来,使用.loadby sos.dll clr加载托管调试扩展

注:以上内容适用于.NETV4及更高版本。早期版本的.NET need.loadby sos.dll mscorwks

现在,您可以使用~*e转储所有托管线程堆栈!clrstack并检查每个托管堆栈,以查看每个线程的用途


另一件要尝试的事情是查看每个托管线程的最后一个托管异常!线程。这将列出每个托管线程,并指示该线程的最后一个托管异常(如果存在)。然后,您可以使用检查托管异常!pe

您说已经安装了windbg,但我不确定您的意思是在您的开发机器上还是在运行长时间运行的进程的机器上。如果是后者,并且由于这是一个.NET进程,windbg和进程的位数必须匹配,例如32位windbg调试32位.NET进程或64位windbg调试64位进程。确定进程的位后,将匹配windbg的位附加到进程文件|附加到进程

然后使用.symfix;修复符号路径;。重新装载

接下来,使用.loadby sos.dll clr加载托管调试扩展

注:以上内容适用于.NETV4及更高版本。早期版本的.NET need.loadby sos.dll mscorwks

现在,您可以使用~*e转储所有托管线程堆栈!clrstack并检查每个托管堆栈,以查看每个线程的用途



另一件要尝试的事情是查看每个托管线程的最后一个托管异常!线程。这将列出每个托管线程,并指示该线程的最后一个托管异常(如果存在)。然后,您可以使用检查托管异常!pe

很遗憾,我无法在运行visual studio的服务器上安装它。@RichardDesLonde您可以安装远程调试器。一旦它连接到进程,然后呢?我是否只在我认为它正在处理的位置设置断点?应用程序正在Windows Server 2003服务器上运行,进程I.net 4.0…我尝试安装visual studio 2012,但每次都失败。@RichardDesLonde将其附加到您的计算机上。只需点击暂停按钮。很遗憾,我无法在运行visual studio的服务器上安装它。@RichardDesLonde您可以安装远程调试器。一旦它连接到进程,然后呢?我是否只在我认为它正在处理的位置设置断点?应用程序正在Windows Server 2003服务器上运行,进程I.net 4.0…我尝试安装visual studio 2012,但每次都失败。@RichardDesLonde将其附加到您的计算机上。只需点击暂停按钮。安装远程调试后,我就可以从创建应用程序的项目中连接到进程并设置断点?该应用程序正在Windows Server 2003服务器和进程I.net 4.0上运行…我尝试安装调试程序,它说需要更新版本的Windows。奇怪,我不认为远程调试器只支持特定的windows版本。您确定已尝试安装适用于32位的x86版本或适用于64位的x64版本吗?是的,这是Win2k3和I的x64版本
尝试安装x64版本。嗯,似乎不支持。我猜您的选择是安装vs2010并使用该版本的远程调试器,或者使用windbg,它具有非常陡峭的学习曲线。抱歉。安装远程调试后,我可以从创建应用程序的项目中连接到进程并设置断点?该应用程序正在Windows Server 2003服务器和进程I.net 4.0上运行…我尝试安装调试程序,但它说需要更新版本的Windows。奇怪,我不认为远程调试器只支持特定的windows版本。您确定您尝试安装了适用于32位的正确版本x86或适用于64位的正确版本x64吗?是的,这是Win2k3的x64版本,我尝试安装x64版本。嗯,似乎不支持。我猜您的选择是安装vs2010并使用该版本的远程调试器,或者使用具有相当陡峭学习曲线的windbg。很抱歉