4

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

有没有办法,当附加到多个进程,你可以知道哪一个已经打断点?反复试验的解决方案是每次附加一个解决方案,查看断点是否被命中,或者停止其中一个服务(通过services.msc)并查看哪个进程ID消失 - 但这两种解决方案都不可扩展对我来说。有没有更优雅的方式?

谢谢!

回答

4

你可以手表添加以下语句:

System.Diagnostics.Process.GetCurrentProcess().Id 

这给你的PID(进程ID)您连接到。 您可以在Windows任务管理器中查找pid(菜单视图 - >选择列并打勾PID)。

希望这有助于

+0

这两种解决方案都可以工作,尽管这个方法在通过监视窗口检索ID时更为简洁,所以我将其标记为答案。 – Alec

4

你可以试试“当打......”上一个断点可用的选项(右键点击断点,它在弹出的右键菜单)。然后,您可以打印与很多其他的信息,比如沿着一个变量的值的消息:

$地址 - 当前指令

$来电 - 上函数名称

$调用堆栈 - 调用堆栈

$函数 - 当前功能名称

$ PID - 进程ID

$ PNAME - 进程名称

$ TID - 线程ID

$ TNAME - 线程名称

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

3

这是进程窗口是什么(调试 - > Windows的>进程或Ctrl + Alt + Z)。

+1

该窗口中的ID列是PID。如果它是十六进制,并且你想用十进制(ala Task Manager),切换到Autos窗口,右键单击并翻转十六进制显示选项,然后切换回进程窗口。 – Spike0xff

相关问题