5

我正在通过附加到两个实例来调试具有两个正在运行的实例的 Windows 服务。我这样做是因为我知道只有一个实例会达到我的断点,但我想知道是哪个实例,这样我以后就不必同时附加到这两个实例上。

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

谢谢!

4

3 回答 3

8

您可以在以下语句中添加手表:

System.Diagnostics.Process.GetCurrentProcess().Id

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

希望这可以帮助

于 2013-01-21T16:22:06.917 回答
5

您可以尝试断点上可用的“当命中...”选项(右键单击断点,它位于弹出的上下文菜单中)。然后,您可以打印一条消息,其中包含变量的值以及许多其他信息,例如:

$ADDRESS - 当前指令

$CALLER - 以前的函数名称

$CALLSTACK - 调用堆栈

$FUNCTION - 当前函数名称

$PID - 进程 ID

$PNAME - 进程名称

$TID - 线程 ID

$TNAME - 线程名称

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

于 2013-01-21T16:22:08.903 回答
4

这就是 Processes 窗口的用途(Debug->Windows->Processes,或 Ctrl+Alt+Z)。

于 2013-02-05T12:10:36.483 回答