【问题标题】:How can we take minidump during exceptions我们如何在异常期间采取 minidump
【发布时间】:2011-04-17 22:17:34
【问题描述】:

我正在处理一个处理异常的子项目(.NET)。以下是我的要求

当异常发生时,异常程序集必须捕获

  1. CPU 信息
  2. 导致问题的方法
  3. 导致问题的数据
  4. 环境详细信息(路径和其他信息)

在所有这些中,最困难的部分是获取导致问题的数据。

数据可以存储在方法主体内的任何位置。它可能是方法参数、局部变量、对象等。我相信.Net 中没有可用的接口可以在异常时暴露内存中的数据。所以我想在异常期间进行小型转储。 .Net 中是否可以创建迷你转储。

我的软件环境是。 .Net 3.5、WCF、Silverlight

请给我一些链接。

谢谢

【问题讨论】:

  • 不要粗鲁,但谁提出了这些要求?我从来没有遇到过异常并想,“天哪,如果我有关于 CPU 的当前状态和所有环境变量的信息,我就会解决这个 bug!”
  • 叹息......当人们开始在他们的 SO 问题中陈述要求时,我讨厌它。几乎感觉就像他们正在分发任务。我来这里是为了暂时摆脱要求。
  • @jdv,一个需求将包含很多东西,但我们在这里问的可能是其中的一小部分,我们不知道如何开始。不是我们发出我们的要求,但同时我们也没有要求其他人完成。一些链接的提示将有助于我们理解。
  • @Bepenfriends:没有难过的感觉,我明白。在这里避免使用这个词。
  • 伙计们,我正在寻找一个可以在生产环境中实施的想法。在生产环境中可能无法使用调试器(VS/processdump/debugdiags 等)。

标签: .net exception stack-trace callstack


【解决方案1】:

我编写了一个托管控制台应用程序,它调用本机 API 来创建小型转储。我把它贴在这里: Complete Minidump code

其实很简单。真正最困难的部分是确定您要为小型转储文件命名的名称。

【讨论】:

    【解决方案2】:

    调试器对通过其他答案中描述的方法创建的托管代码转储的支持是(或曾经)有限的 - 请参阅 @Jaredpar 的信息 here

    here 的信息,据推测,Visual Studio 2010 支持此功能。

    Visual Studio 2010 调试器可以 读取包含的转储文件 有关托管代码的信息, 非托管代码,或两者的混合。 您可以调试本机和托管 使用正常调试转储 窗户。

    仅供参考,您可以设置 Process Dumper 以触发选定本机异常的进程转储 - 但不确定这在托管进程中如何工作。 fwiw 我看不出为什么原生异常不会触发转储,因为它发生在 CLR 范围之外(在原生代码堆栈帧中),也没有理由在 VS2010 中无法处理这样的转储。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2020-08-17
        • 2017-03-18
        相关资源
        最近更新 更多