我最近接手了一个项目,我不确定最后一个人是如何调试的......我有两个可执行文件,一个最终运行另一个。我会称他们为 exe1 和 exe2 。这些是在C#中创建的,我使用的是Visual Studio 2015
运行 exe1 可以正常运行。它做了一些事情,最终开始了 exe2 。 exe2 最终出错。它正在写入我的日志文件:
BaseException:System.NullReferenceException:未设置对象引用 到一个对象的实例。
我通常可以解决该错误。我确定这只是一个创建对象或问题的问题,但是我的试错法修复它到目前为止还没有奏效。
由于我没有 exe1 的源代码,我无法安装一些超级程序来一次性完成所有操作(这将允许我调试)。有没有办法设置断点并逐步完成 exe2 呢?
我应该添加 exe2 需要 exe1 来运行。 exe1 会做很多事情,没有它 exe2 会立即崩溃。
答案 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
}