由另一个 exe 调试 运行 的 exe
Debugging an exe that's run by another exe
我最近接手了一个项目,我不确定最后一个人是如何调试它的……我有两个可执行文件,一个最终 运行 另一个。我将它们称为 exe1 和 exe2。这些是在 C# 中创建的,我使用 Visual Studio 2015
运行 exe1 工作正常。它会做一些事情,并最终启动 exe2。 exe2 最终出错。它正在写入我的日志文件:
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
}
我最近接手了一个项目,我不确定最后一个人是如何调试它的……我有两个可执行文件,一个最终 运行 另一个。我将它们称为 exe1 和 exe2。这些是在 C# 中创建的,我使用 Visual Studio 2015
运行 exe1 工作正常。它会做一些事情,并最终启动 exe2。 exe2 最终出错。它正在写入我的日志文件:
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
}