如何调试C#进程

时间:2012-03-06 23:18:52

标签: c#

我想调试两个进程,(ProcessA.exe和ProcessB.exe)

在通常情况下,启动ProcessA时将启动ProcessB。 ProcessA是一个跨平台的exe。 ProcessB是C#应用程序。(Visual Studio 2010 Professional)。

我做了以下调试ProcessB(C#)

  1. 点击exe。
  2. 从C:\ Program Files \ Test启动ProcessA
  3. ProcessB到Visual Studio 2010来自C:\ MyProjects。附加过程A.
  4. 在Visual Studio 2010“附加到进程”窗口中:,

    附加到:作为“托管(v4。)代码”。

    我把断点放在C#代码中。但是断点永远不会被执行,ProcessB调用也没有在没有调试的情况下执行(即,从不同位置启动所有进程)

4 个答案:

答案 0 :(得分:1)

如果A通常开始B,那么看起来你应该让A开始B然后在它开始后将视觉工作室附加到B过程。

答案 1 :(得分:1)

Microsoft Child Process Debugging Power Tool很好地处理了这种情况。它可以与Visual Studio 2013一起使用。

This blog post涵盖了一些必须设置的选项,主要是“如果您正在调试.NET代码,则必须选择启用混合模式调试”,但是我建议您通读全文帖子。

答案 2 :(得分:0)

您应该附加到流程B 而不是流程A

您可以尝试以下操作:

  1. 启动ProcessA.exe
  2. VS->附加到流程窗口 - >附加到 ProcessB.exe
  3. 如果需要调试进程A,则应使用具有本机调试的单独VS实例来完成此操作。

答案 3 :(得分:0)

如果您可以更改ProcessB的代码,我建议添加对参数“-d”或“-debug”的支持,该参数触发MessageBox出现在Main方法的开头以暂停执行并允许您附加到这个过程。连接后,单击MessageBox中的“确定”继续。在MessageBox调用之后不久添加一个调试断点。

if (arguments.Debug)
{
    // Make it easy to find in the process list.
    MessageBox.Show("Attach to process now.", "Attach to this process!");
}