从华生医生身上救回卡斯塔克.dmp (c#)

本文关键字:斯塔克 卡斯塔 dmp 医生 | 更新日期: 2023-09-27 17:50:49

我试图保存二进制文件崩溃中包含的调用堆栈的详细信息。Dr. Watson在应用程序崩溃时创建的dmp。

dmp文件存在,所以我只想在(c#)中读取一个并保存调用堆栈,如果可能的话。有人做过这样的事吗?真的,这可能吗?

我可以看车祸。使用Visual Studio手动创建dmp文件并手动复制堆栈,但我希望这个过程在原始程序中自动执行。

如有任何帮助,不胜感激。

欢呼史蒂夫

从华生医生身上救回卡斯塔克.dmp (c#)

(应该是注释,但是太长)

既然你也问了这个问题,我有强烈的感觉,这是一个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#中的异常处理或在互联网上搜索术语trycatch异常处理

您可以使用调试诊断工具读取转储文件

Codeproject文章解释了如何使用它