0

我正在尝试从应用程序崩溃时由 Watson 博士创建的二进制文件 crash.dmp 中包含的调用堆栈中保存详细信息。

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

我可以使用 Visual Studio 手动查看 crash.dmp 文件并手动复制堆栈,但我希望此过程在原始程序中自动化。

任何帮助,将不胜感激。

干杯

史蒂夫

4

2 回答 2

0

(应该是评论,但是太长了)

既然你也问了这个问题,我有强烈的感觉,这是一个XY 问题。您可能不想阅读此问题中所述的转储,并且您可能不想像其他问题中那样自己编写调试器。我的猜测:您的实际问题是您的程序崩溃并且您想避免这种情况。

您的首选应该是在调试器(Visual Studio)下按播放按钮以调试模式运行程序,然后等到崩溃发生并找出崩溃的真正原因。以某种方式更改您的代码,以便根本不会发生崩溃,例如通过检查是否满足所有先决条件。

如果由于某种原因无法解决问题,那么有一种方法可以防止崩溃。崩溃是由异常引起的,您可以使用异常处理来处理它。在 C# 中,它看起来像这样:

try
{
    // force a crash for demo purposes
    throw new InvalidOperationException();
}
catch (InvalidOperationException ex)
{
    // do something instead of crashing here
}

有关异常处理主题的更多信息,请阅读C# 中的异常处理或在 Internet 上搜索术语trycatch异常处理

于 2014-03-19T20:12:47.843 回答
0

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

Codeproject文章解释了如何使用它。

于 2014-03-19T21:05:36.270 回答