我试图保存二进制文件崩溃中包含的调用堆栈的详细信息。Dr. Watson在应用程序崩溃时创建的dmp。
dmp文件存在,所以我只想在(c#)中读取一个并保存调用堆栈,如果可能的话。有人做过这样的事吗?真的,这可能吗?
我可以看车祸。使用Visual Studio手动创建dmp文件并手动复制堆栈,但我希望这个过程在原始程序中自动执行。
如有任何帮助,不胜感激。
欢呼史蒂夫(应该是注释,但是太长)
既然你也问了这个问题,我有强烈的感觉,这是一个XY问题。您可能不希望像这个问题中所说的那样读取转储,也不希望像另一个问题中那样自己编写调试器。我猜:你的实际问题是你的程序崩溃了,而你想要避免这种情况。
你的第一选择应该是在调试器(Visual Studio)下按play按钮在Debug模式下运行程序,然后等待,直到崩溃发生,找出真正的原因为什么它崩溃。以某种方式修改代码,使崩溃根本不会发生,例如,检查是否满足所有前提条件。
如果,无论什么原因,你不能解决这个问题,有一个方法来防止崩溃。崩溃是由异常引起的,您可以使用异常处理来处理它。在c#中,它看起来像这样:
try
{
// force a crash for demo purposes
throw new InvalidOperationException();
}
catch (InvalidOperationException ex)
{
// do something instead of crashing here
}
有关异常处理主题的更多信息,请阅读c#中的异常处理或在互联网上搜索术语try, catch或异常处理。
您可以使用调试诊断工具读取转储文件
Codeproject文章解释了如何使用它