调试由另一个exe运行的exe

时间:2018-02-08 20:09:27

标签: c# debugging visual-studio-2015 exe

我最近接手了一个项目,我不确定最后一个人是如何调试的......我有两个可执行文件,一个最终运行另一个。我会称他们为 exe1 exe2 。这些是在C#中创建的,我使用的是Visual Studio 2015

运行 exe1 可以正常运行。它做了一些事情,最终开始了 exe2 exe2 最终出错。它正在写入我的日志文件:

  

BaseException:System.NullReferenceException:未设置对象引用   到一个对象的实例。

我通常可以解决该错误。我确定这只是一个创建对象或问题的问题,但是我的试错法修复它到目前为止还没有奏效。

由于我没有 exe1 的源代码,我无法安装一些超级程序来一次性完成所有操作(这将允许我调试)。有没有办法设置断点并逐步完成 exe2 呢?

我应该添加 exe2 需要 exe1 来运行。 exe1 会做很多事情,没有它 exe2 会立即崩溃。

3 个答案:

答案 0 :(得分:3)

Visual Studio允许debug child processes几年了。我已经尝试过拥有两个项目(父进程和子进程)的代码,并且运行良好。不确定它是否可以在你的情况下只有exe2程序的代码,但我认为值得尝试。将exe1设置为项目的调试目标,激活子调试,并查看它是否在exe2中遇到断点...

答案 1 :(得分:1)

由于您拥有 exe2 的代码,因此您可以在代码中添加Debugger.Launch(),这将停止程序并允许您在该代码行附加调试器。< / p>

您可以将其添加为main方法的第一行,以确保您在启动时正确捕获它。

答案 2 :(得分:1)

有两种方法可以解决这个问题。

<强> 1 即可。使用Debugger.Launch()作为John给出了上面的答案。

public static void Main(string[] args)
            {
                Debugger.Launch();

                //Rest of your code 
            }

这将允许您附加到正在运行的Visual Studio或启动新实例。

2。当前一个不起作用时,另一种方法是在代码的开头放一个循环来检查是否附加了调试器,这给你足够的时间来做“附加到流程“方法。

public static void Main(string[] args)
{
    while(!Debugger.IsAttached)
    {
        Thread.Sleep(1000); //Sleep 1 seconds and check again.
    }

    //Rest of your code  
}