繁体   English   中英

我支持的程序是使用SIGSEGV崩溃但是我无法从.dmp文件中崩溃

[英]A program I support is crashing with SIGSEGV but I can't from the .dmp file

根据标题,当我支持的程序崩溃时,我无法找到任何转储文件。

应用程序的日志清楚地提到了它的SIGSEGV异常,但我搜索了我的整个硬盘驱动器,并且没有任何地方可以找到.dmp文件。

该程序的开发人员在其他地方已经看到类似的问题,但到目前为止还无法解释为什么会发生这种情况 - 而且我们现在有点陷入困境。

应用程序日志的最后一部分读作:

Received signal SIGSEGV, segmentation violation.
OurApplication::sigHandler 11.
Removing signal handlers.
OurApplication::signalCatched.
OurApplication::sigHandler: exiting application.
Removing signal handlers.

我对此的有限理解是我们的应用程序的信号处理程序可能正在“中和”抛出的SIGSEGV异常。 因此,没有核心转储产生...我确实向开发人员提出了这个想法,但他们似乎从未真正调查过这可能是原因。 他们在柜台中提出的理论是他们认为dmp没有产生的原因是因为程序可能会非常接近地崩溃两次。

所以我现在的问题是:

  • 是否有任何Windows7参数可以控制.dmp文件的创建?
  • 是否需要将任何需求/标志编译到程序中,以便它(或Windows)在崩溃时创建核心转储文件?
  • 我99%肯定它必须是负责创建核心文件的Windows,因为程序本身在崩溃时会死/终止,对吗?
  • 还有其他我应该注意的事项,或检查,或“证据”我可以收集,然后向我们的开发人员展示?

提前谢谢了

考虑以编程方式创建自己的minidump文件。 应该有大量的代码来展示如何做到这一点。 你可以试试这里:

https://stackoverflow.com/search?q=minidump

这样,您不依赖Dr. Watson或任何其他设置来创建转储文件。 相反,您将调用DBGHELP.DLL中的函数来创建转储文件。

是否有任何Windows7参数可以控制.dmp文件的创建?

有一些控制崩溃转储创建的参数:请参阅MSDN收集用户模式转储

是否需要将任何需求/标志编译到程序中,以便它(或Windows)在崩溃时创建核心转储文件?

您不需要编译任何内容以使上一个答案起作用。 但是,程序需要因未处理的异常而终止,这意味着您需要让异常冒泡并且不被未处理的异常处理程序处理。

我99%肯定它必须是负责创建核心文件的Windows,因为程序本身在崩溃时会死/终止,对吗?

如上所述,Windows可以处理这个问题,让Windows处理崩溃是个好主意。 想象一下,由于内存泄漏,您的程序已损坏。 一些内存已被覆盖。 在这种情况下,可以销毁未处理的异常处理程序 但是,Windows仍然可以完全控制进程,可以暂停它并从外部(而不是从内部)创建转储。

还有其他我应该注意的事项,或检查,或“证据”我可以收集,然后向我们的开发人员展示?

好吧,建议由于上述原因让Windows创建转储。 然后他们也不需要实现配置设置(您不希望始终创建故障转储文件,是吗?)。 您不需要为文件实现限制编号。 您不需要检查磁盘空间等。

您可以建议阅读Windows Internals 6书籍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM