如何调试垃圾堆/无.dmp/用户机器
How to debug trashed heap / no .dmp / user's machine
我有一个两年前的C++/Win32程序,有数百名用户。 几天前,一位用户报告了以下崩溃。 它在程序收到任何用户输入之前在启动时发生。 没有其他人遇到这个问题。
问题签名:问题事件名称:APPCRASH 应用程序名称:xyz.exe 应用程序版本:0.0.2.94 应用程序时间戳:50b92e99 故障模块名称:StackHash_dec5 故障模块版本:6.0.6002.18541
故障模块时间戳:4ec3e39f 异常
代码:c0000374
异常偏移量:000abc4f
操作系统版本:6.0.6002.2.2.0.768.3
区域设置 ID:1033
其他信息 1:dec5
其他信息 2: cef9e6e9412cee8472af82d5cdb064b7
附加信息 3: 5d30
附加信息 4: 7ad67f8281216f819f54c76815aefb56
该程序使用 SetUnhandledExceptionFilter 处理程序来编写小型转储,但用户告诉我没有小型转储。 我想这是正常的,因为它是代码 c0000374(堆损坏)。
在用户报告问题后,我给了他一个特殊的构建,其中包含无数的跟踪语句,包括记录通过消息泵的每条消息,但我从中了解到的是,GetMessage 收到的最后一条消息是一条新消息,我将其作为调试内容的一部分放入该特殊构建中。 该消息及其调用的代码不能成为崩溃的来源,因为我在他的崩溃开始后添加了它们。 也许这意味着崩溃发生在其他线程中,而不是处理消息的线程中。 程序在启动时会创建一堆线程。
任何人都可以提出调试策略吗? 我没有.dmp文件,我迷路了。
只要您的应用程序崩溃并且没有立即退出,即进程仍然存在,您就可以使用 procdump by sysinternals ( http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx ) 和procdump -ma xxxx.exe
编写完整的内存转储,然后您可以使用 WinDbg 进行分析。
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- Visual C++(VS2017)中用户定义的转换不明确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- RegGetValue在当前用户下找不到名称
- 如何调试垃圾堆/无.dmp/用户机器