如何判断我正在调试哪个进程(附加到多个进程)?

Ale*_*lec 5 debugging visual-studio-2010 visual-studio-debugging attach-to-process

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

有没有办法,当附加到多个进程时,你可以告诉哪一个已经命中了断点?一个试错法的解决方案是一次附加一个并查看断点是否被命中,或者,停止其中一个服务(通过services.msc)并查看哪个进程ID消失 - 但这两个解决方案似乎都无法扩展对我来说.有更优雅的方式吗?

谢谢!

Ome*_*viv 10

这就是“进程”窗口的用途(“调试”->“Windows”->“进程”,或 Ctrl+Alt+Z)。

  • 该窗口中的 ID 列就是 PID。如果它是十六进制并且您想要十进制(如任务管理器),请切换到“自动”窗口,右键单击并翻转“十六进制显示”选项,然后切换回“进程”窗口。 (2认同)

Ste*_*eri 6

您可以将监视添加到以下语句中:

System.Diagnostics.Process.GetCurrentProcess().Id
Run Code Online (Sandbox Code Playgroud)

这为您提供了附加的PID(进程ID).您可以在Windows任务管理器中查找pids(菜单视图 - >选择列并勾选PID).

希望这可以帮助


Bog*_*SFT 5

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

$ ADDRESS-当前指令

$ CALLER-上一个函数名称

$ CALLSTACK-调用堆栈

$ FUNCTION-当前函数名称

$ PID-进程ID

$ PNAME-进程名称

$ TID-线程ID

$ TNAME-线程名称

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