【问题标题】:How can I tell which process I am debugging (attached to multiple processes)?如何判断我正在调试哪个进程(附加到多个进程)?
【发布时间】:2013-01-04 18:04:33
【问题描述】:

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

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

谢谢!

【问题讨论】:

标签: visual-studio-2010 debugging visual-studio-debugging attach-to-process


【解决方案1】:

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

System.Diagnostics.Process.GetCurrentProcess().Id

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

希望对你有帮助

【讨论】:

  • 两种解决方案都有效,虽然这个解决方案更简洁地通过监视窗口检索 ID,因此我将其标记为答案。
  • 也可以使用 ProcessName 而不是 ID 来给出一些更相关的东西(假设进程名称是明确的)
【解决方案2】:

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

$ADDRESS - 当前指令

$CALLER - 以前的函数名称

$CALLSTACK - 调用堆栈

$FUNCTION - 当前函数名

$PID - 进程 ID

$PNAME - 进程名称

$TID - 线程 ID

$TNAME - 线程名称

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

【解决方案3】:

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

【讨论】:

  • 该窗口中的 ID 列是 PID。如果它是十六进制并且您想要十进制(ala 任务管理器),切换到自动窗口,右键单击并翻转十六进制显示选项,然后切换回进程窗口。
猜你喜欢
  • 2013-05-26
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 2017-02-12
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多