gpt4 book ai didi

c++ - 如何调试垃圾堆/没有.dmp/用户的机器

转载 作者:可可西里 更新时间:2023-11-01 09:30:24 25 4
gpt4 key购买 nike

我有一个使用了两年的 C++/Win32 程序,它有数百个用户。几天前,一位用户报告了以下崩溃。在程序接收到任何用户输入之前,它发生在启动时。没有其他人遇到这个问题。

Problem signature:
Problem Event Name: APPCRASH
Application Name: xyz.exe
Application Version: 0.0.2.94
Application Timestamp: 50b92e99
Fault Module Name: StackHash_dec5
Fault Module Version: 6.0.6002.18541
Fault Module Timestamp: 4ec3e39f
Exception Code: c0000374
Exception Offset: 000abc4f
OS Version: 6.0.6002.2.2.0.768.3
Locale ID: 1033
Additional Information 1: dec5
Additional Information 2: cef9e6e9412cee8472af82d5cdb064b7
Additional Information 3: 5d30
Additional Information 4: 7ad67f8281216f819f54c76815aefb56

该程序使用 SetUnhandledExceptionFilter 处理程序来编写小型转储,但用户告诉我没有小型转储。我猜这是正常的,因为它是代码 c0000374(堆损坏)。

在用户报告问题后,我给了他一个带有大量跟踪语句的特殊构建,包括记录通过消息泵的每条消息,但我从中了解到的是 GetMessage 收到的最后一条消息是一条新消息作为调试内容的一部分,我放入那个特殊版本的消息。该消息及其调用的代码不可能是崩溃的根源,因为我在他的崩溃开始后添加了它们。也许这意味着崩溃发生在其他线程中,而不是处理消息的线程中。程序在启动时会创建一堆线程。

任何人都可以建议一个调试策略吗?没有 .dmp 文件我就迷路了。

最佳答案

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

关于c++ - 如何调试垃圾堆/没有.dmp/用户的机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com