简体   繁体   English

如何调试trashed heap / no .dmp / user的机器

[英]How to debug trashed heap / no .dmp / user's machine

I've got a two-year-old C++/Win32 program with hundreds of users. 我有一个有两百年历史的C ++ / Win32程序,有数百个用户。 A couple of days ago, one user reported the following crash. 几天前,一位用户报告了以下崩溃。 It's happening on startup before the program receives any user input. 它在程序收到任何用户输入之前在启动时发生。 Nobody else is having this problem. 没有人遇到这个问题。

Problem signature: 问题签名:
Problem Event Name: APPCRASH 问题事件名称:APPCRASH
Application Name: xyz.exe 应用程序名称:xyz.exe
Application Version: 0.0.2.94 应用版本:0.0.2.94
Application Timestamp: 50b92e99 应用程序时间戳:50b92e99
Fault Module Name: StackHash_dec5 故障模块名称:StackHash_dec5
Fault Module Version: 6.0.6002.18541 故障模块版本:6.0.6002.18541
Fault Module Timestamp: 4ec3e39f 故障模块时间戳:4ec3e39f
Exception Code: c0000374 例外代码:c0000374
Exception Offset: 000abc4f 例外抵消:000abc4f
OS Version: 6.0.6002.2.2.0.768.3 操作系统版本:6.0.6002.2.2.0.768.3
Locale ID: 1033 区域设置ID:1033
Additional Information 1: dec5 附加信息1:dec5
Additional Information 2: cef9e6e9412cee8472af82d5cdb064b7 附加信息2:cef9e6e9412cee8472af82d5cdb064b7
Additional Information 3: 5d30 附加信息3:5d30
Additional Information 4: 7ad67f8281216f819f54c76815aefb56 附加信息4:7ad67f8281216f819f54c76815aefb56

The program uses a SetUnhandledExceptionFilter handler to write a minidump but the user tells me there's no minidump. 该程序使用SetUnhandledExceptionFilter处理程序来编写一个minidump,但用户告诉我没有minidump。 I guess that's normal since it's code c0000374 (heap corruption). 我猜这是正常的,因为它是代码c0000374(堆损坏)。

After the user reported the problem, I gave him a special build with a bazillion trace statements, including logging every message that goes through the message pump, but all I learned from it is that the last message received by GetMessage was a new message that I put in that special build as part of the debugging stuff. 在用户报告问题后,我给了他一个特殊的构建,其中包含大量的跟踪语句,包括记录通过消息泵的每条消息,但我从中学到的是GetMessage收到的最后一条消息是我发送的新消息把这个特殊的版本作为调试内容的一部分。 That message and the code it invokes can't be the source of the crash because I added them after his crashes started. 该消息及其调用的代码不能成为崩溃的根源,因为我在崩溃开始后添加了它们。 Maybe this implies that the crash is happening in some other thread, not the thread that handles messages. 也许这意味着崩溃发生在其他一些线程中,而不是处理消息的线程。 The program creates a bunch of threads when it starts. 该程序在启动时会创建一堆线程。

Can anybody suggest a strategy for debugging this? 任何人都可以提出调试策略吗? I'm lost without a .dmp file. 我失去了没有.dmp文件。

只要您的应用程序崩溃并且不立即退出,即进程仍然存在,您可以使用procdump通过sysinternals( http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx )使用procdump -ma xxxx.exe写一个完整的内存转储,然后你可以使用WinDbg进行分析。

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

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