我面临一个严重的问题,我的计划,它得到再生,只有在客户的地方。把日志,不是在帮我怀疑的失败是发生在一个第三方dll。由于某些原因,我不能帮助从图书馆提供者。我想到的是产生一个倾倒点的失败,以便分析。这是一个建议的做法?或者任何替代方案?

有帮助吗?

解决方案

是,这一点是每个程序应该具有和通常利用越好。

我建议你不要使用第三方库。创建您自己的转储代替。这是非常简单和直接的。你基本上需要做到以下几点:

您程序需要访问的 dbghelp.dll 即可。这是一个Windows DLL,它允许你创建人类可读的调用堆栈等调试器使用此DLL在过程中显示的数据。它也处理验尸调试,即某种转储。这个DLL可以安全地与软件分发。我建议你下载并安装 Windows调试工具。这会给你访问的工具种种,最好的工具 WINDBG.EXE 和最新的dbghelp.dll处还在于分布。

在dbghelp.dll调用例如的 MiniDumpWriteDump()下,将创建的转储文件,这就是或多或少它。你完成了。只要你在你的手中该文件,就可以开始使用它。无论是在Visual Studio调试器,这可能甚至可能与.dmp文件扩展名相关联,或者在WinDbg中。

现在,有思考的,而你在这几件事情。当检查转储文件这样,你需要生成.pdb文件,当您编译和链接可执行文件。否则,没有映射在转储数据以人类可读数据的机会,例如获得良好的调用堆栈和变量值等这也意味着你必须拯救这些.pdb文件。你需要能够完全符合他们对抗很释放。由于转储文件是最新与可执行文件的日期戳加盖,调试器需要精确的pdb文件。如果你的代码并没有改变单个位这不要紧,如果.pdb文件属于另一个编译会话,你就完了。

我鼓励每一个窗口的Win32开发商退房奥列格Starodumov的网站 DebugInfo.com 。它含有大量的样本和教程以及如何配置和调整你的转储文件生成的。当然有办法排除某些数据,创建自定义的调试信息附加到转储等万千。

请即小型转储将包含在例外一次应用程序状态非常有限的信息。这种交易是一个小文件(根据您的设置50-100左右KB)。但是,如果你愿意,你可以创建一个完全转储,其中将包含整个应用程序的状态,即全局乃至内核对象。这些文件可以是巨大的,只应在极端的情况下被使用。

如果有法律方面的问题,只要确保你的客户都知道你在做什么。我敢打赌,你已经有一些合同,你不应该泄露商业秘密或其他法律方面的问题。如果客户抱怨,说服他们是多么的重要发现的缺陷,而这将大大提高软件的质量。在没有任何成本或多或少更高的质量。如果它不花费他们什么,这也是一个很好的理由:)

最后,这里是另一个伟大的网站,如果你想更多的阅读了关于崩溃转储分析: dumpanalysis.org

希望这有助于。如果你要我解释得请评论。

干杯!

编辑:

只是想补充一点, MiniDumpWriteDump()需要你有一个指向转储的异常的信息(下划线)结构。但是,在 GetExceptionInformation()宏在异常时间,异常处理提供了这件事情(结构化异常处理或SEH):

__try {

}
__except (YourHandlerFunction(GetExceptionInformation())) {

}

YourHandlerFunction()将吨他以一个生成转储(或其他一些功能下降的调用链)的照顾。另外,如果你在你的程序的自定义错误,例如有事不应该发生,但在技术上也不例外,您可以使用的RaiseException()以创建你自己的。

<强> GetExceptionInformation()仅可在此上下文中程序执行期间使用的和其他地方。

其他提示

崩溃转储是一个很常见的故障排除方法是非常有效的,特别是对于只在重现客户的现场问题。

只要确保顾客/客户明白你在做什么,你有权限。这有可能是一个崩溃转储可以有敏感信息,一个客户可能不希望(或允许),让走出大门或通过导线。

比这更好的还有库,将上载数据崩溃回你。

BugDumpBugSplat

还有微软办法:

http://msdn.microsoft.com/en-us/library/aa936273.aspx

免责声明:我不是律师,我也不假装是一个,这不是法律意见

您可以在日志和崩溃的数据转储还取决于哪些领域你是在工作。例如,医疗设备和病人信息系统通常包含有关的患者,不应该是可见的未经授权的人的敏感数据。

  

的HIPAA隐私规则时调节   的使用和某些公开   通过“涉及的实体”举行信息   (......),它建立了法规   的使用和保护披露   健康信息(PHI)。 PHI是任何   被覆盖的实体持有信息   它涉及的健康状况,   提供医疗保健,还是支付   对于可以链接到保健   的个体。[10]这被解释   相当宽泛,并且包括任何部分   个人的医疗记录或   支付历史。 - 必

它不应该是可能的健康信息链接到的个体。的故障转储和日志应被匿名并汽提任何敏感信息的,或根本不发送。

这也许并不适用于您的具体情况,所以这更多的是一种普遍注意。我认为它适用于处理敏感信息的其他领域,如军事和财政等。

基本上,生成转储文件的最简单方法是使用 adplus。您不需要更改您的代码。

正如上面的文章中提到的,Adplus是Windows调试工具的一部分。Adplus基本上是windbg的一个巨大的vbscript自动化。

使用 adplus 需要做什么:

  1. 下载并安装 Windows 调试工具到 c:\debuggers
  2. 开始你的申请
  3. 打开命令行并导航到 c:\debuggers
  4. 运行这一行“adplus -crash your_exe.exe”
  5. 重现崩溃

您将获得一个包含您需要的所有信息的小型转储。您可以在您最喜欢的调试器中打开故障转储。在 Windbg 中,“analyze -v”命令帮助我解决了至少 40% 的仅发生在客户站点且无法在内部重现的崩溃。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top