由另一个 exe 调试 运行 的 exe

Debugging an exe that's run by another exe

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

运行 exe1 工作正常。它会做一些事情,并最终启动 exe2exe2 最终出错。它正在写入我的日志文件:

BaseException:System.NullReferenceException: Object reference not set to an instance of an object.

(我通常可以解决该错误。我确定这只是创建对象或其他东西的问题,但我修复它的反复试验方法到目前为止还没有奏效。)

我没有 exe1 的源代码,所以我无法安装一些超级程序来一次性完成所有事情(这将允许我进行调试)。有没有一种方法可以设置断点并通过 exe2 执行它的操作?

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

Visual Studio 允许 debug child processes 几年了。我已经尝试过它具有两个项目(父进程和子进程)的代码,并且效果很好。不确定它是否适用于您只有 exe2 程序代码的情况,但我认为值得一试。将exe1设置为项目的调试目标,启动子调试,看exe2是否打断点...

因为你有 exe2 的代码,你可以在代码中添加 Debugger.Launch(),这将停止程序并允许你在那个位置附加调试器代码行。

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

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

1。使用 Debugger.Launch() 作为约翰在上面给出的答案。

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

                //Rest of your code 
            }

这将允许您附加到您的 运行 visual studio 或启动一个新实例。

2.当前面那个不行的时候,另一种方法是在代码的开头放一个循环来检查是否附加了调试器,这给你足够了是时候执行 "Attach to process" 方法了。

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

    //Rest of your code  
}