我正在调试具有两个运行实例的Windows服务,通过附加到两个实例。我这样做是因为我知道只有一个实例会触发我的断点,但我想知道哪个实例是这样的,以便将来我不必再附加到这两个实例。如何判断我正在调试哪个进程(连接到多个进程)?
有没有办法,当附加到多个进程,你可以知道哪一个已经打断点?反复试验的解决方案是每次附加一个解决方案,查看断点是否被命中,或者停止其中一个服务(通过services.msc)并查看哪个进程ID消失 - 但这两种解决方案都不可扩展对我来说。有没有更优雅的方式?
谢谢!
我正在调试具有两个运行实例的Windows服务,通过附加到两个实例。我这样做是因为我知道只有一个实例会触发我的断点,但我想知道哪个实例是这样的,以便将来我不必再附加到这两个实例。如何判断我正在调试哪个进程(连接到多个进程)?
有没有办法,当附加到多个进程,你可以知道哪一个已经打断点?反复试验的解决方案是每次附加一个解决方案,查看断点是否被命中,或者停止其中一个服务(通过services.msc)并查看哪个进程ID消失 - 但这两种解决方案都不可扩展对我来说。有没有更优雅的方式?
谢谢!
你可以手表添加以下语句:
System.Diagnostics.Process.GetCurrentProcess().Id
这给你的PID(进程ID)您连接到。 您可以在Windows任务管理器中查找pid(菜单视图 - >选择列并打勾PID)。
希望这有助于
你可以试试“当打......”上一个断点可用的选项(右键点击断点,它在弹出的右键菜单)。然后,您可以打印与很多其他的信息,比如沿着一个变量的值的消息:
$地址 - 当前指令
$来电 - 上函数名称
$调用堆栈 - 调用堆栈
$函数 - 当前功能名称
$ PID - 进程ID
$ PNAME - 进程名称
$ TID - 线程ID
$ TNAME - 线程名称
http://msdn.microsoft.com/en-us/library/232dxah7(v=vs.110).aspx
这是进程窗口是什么(调试 - > Windows的>进程或Ctrl + Alt + Z)。
该窗口中的ID列是PID。如果它是十六进制,并且你想用十进制(ala Task Manager),切换到Autos窗口,右键单击并翻转十六进制显示选项,然后切换回进程窗口。 – Spike0xff
这两种解决方案都可以工作,尽管这个方法在通过监视窗口检索ID时更为简洁,所以我将其标记为答案。 – Alec