我正在通过附加到两个实例来调试具有两个正在运行的实例的 Windows 服务。我这样做是因为我知道只有一个实例会达到我的断点,但我想知道是哪个实例,这样我以后就不必同时附加到这两个实例上。
有没有一种方法,当附加到多个进程时,你可以知道哪个进程遇到了断点?试错法的解决方案是一次附加一个,看看是否命中断点,或者停止其中一个服务(通过 services.msc)并查看哪个进程 ID 消失 - 但两种解决方案似乎都不是可扩展的对我来说。有没有更优雅的方式?
谢谢!
我正在通过附加到两个实例来调试具有两个正在运行的实例的 Windows 服务。我这样做是因为我知道只有一个实例会达到我的断点,但我想知道是哪个实例,这样我以后就不必同时附加到这两个实例上。
有没有一种方法,当附加到多个进程时,你可以知道哪个进程遇到了断点?试错法的解决方案是一次附加一个,看看是否命中断点,或者停止其中一个服务(通过 services.msc)并查看哪个进程 ID 消失 - 但两种解决方案似乎都不是可扩展的对我来说。有没有更优雅的方式?
谢谢!
您可以在以下语句中添加手表:
System.Diagnostics.Process.GetCurrentProcess().Id
这为您提供了您所附加的 PID(进程 ID)。您可以在 Windows 任务管理器中查找 pid(菜单视图->选择列并勾选 PID)。
希望这可以帮助
您可以尝试断点上可用的“当命中...”选项(右键单击断点,它位于弹出的上下文菜单中)。然后,您可以打印一条消息,其中包含变量的值以及许多其他信息,例如:
$ADDRESS - 当前指令
$CALLER - 以前的函数名称
$CALLSTACK - 调用堆栈
$FUNCTION - 当前函数名称
$PID - 进程 ID
$PNAME - 进程名称
$TID - 线程 ID
$TNAME - 线程名称
http://msdn.microsoft.com/en-us/library/232dxah7(v=vs.110).aspx
这就是 Processes 窗口的用途(Debug->Windows->Processes,或 Ctrl+Alt+Z)。