在 Visual Studio 中,如何确定我正在调试哪个进程(附加到多个进程)?

11

我正在调试一个有两个运行实例的Windows服务,通过附加到这两个实例来进行调试。我这样做是因为我知道只有一个实例会触发我的断点,但我想知道是哪个实例,以便将来不必再附加到两个实例。

当附加到多个进程时,是否有一种方法可以告诉您哪个进程触发了断点?试错的解决方案是逐个附加并查看是否触发了断点,或者停止其中一个服务(通过Services.msc)并查看哪个进程ID消失,但我认为这两种解决方案都不可扩展。是否有更优雅的方法?


https://learn.microsoft.com/en-us/visualstudio/debugger/pseudovariables - Ajay
3个回答

10
你可以在以下语句上添加一个观察器:
System.Diagnostics.Process.GetCurrentProcess().Id

这将为您提供您所附加的进程的PID(进程ID)。 您可以在Windows任务管理器中查找pid(菜单“视图”->选择列并选中PID)。

希望这有所帮助。


两种解决方案都可行,不过这个更简洁,在监视窗口中检索ID,所以我将把它标记为答案。 - Alec
可以使用进程名称而不是ID来给某些东西更多相关性(假设进程名称是清晰的)。 - Dave

10
这就是进程窗口的作用(调试->窗口->进程,或Ctrl+Alt+Z)。

2
那个窗口中的ID列是PID。如果它是十六进制的,而你想要它以十进制显示(就像任务管理器一样),请切换到Autos窗口,右键单击并翻转十六进制显示选项,然后切换回Processes窗口。 - Spike0xff

5
您可以在断点上尝试“当命中...”选项(右键单击断点,在弹出的上下文菜单中)。然后,您可以打印一个带有变量值及其他大量信息的消息,例如:

$ADDRESS-当前指令

$CALLER-前一个函数名称

$CALLSTACK-调用堆栈

$FUNCTION-当前函数名称

$PID-进程ID

$PNAME-进程名称

$TID-线程ID

$TNAME-线程名称

http://msdn.microsoft.com/en-us/library/232dxah7(v=vs.110).aspx


https://learn.microsoft.com/en-us/visualstudio/debugger/pseudovariables - Ajay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接