我有一个Windows应用程序,我们开发的内部使用。由于Windows错误处理,窗口保持打开,我可以轻松地从任务管理器生成崩溃转储。我以前通过Eclipse在Linux上使用过crash-dumps,但这是第一次在Windows上使用。
服务器是Windows 2012,我的开发机器是Windows 7。
当我在Windbg中加载崩溃转储,加载我的符号,然后选择查看调用堆栈时,只有以下列表:
如何具体查看我的应用程序调用堆栈?
tv6aics11#
看起来您的应用程序是一个32位应用程序,您使用64位Taskmgr生成转储。你应该使用ProcessExplorer,it cares about the bitness:Process Explorer v15.3:它还创建与目标进程位数匹配的转储文件或者从C:\Windows\SysWOW64运行32位Taskmgr以生成转储。
C:\Windows\SysWOW64
yshpjwxd2#
作为already answered,您已经对一个32位应用程序进行了64位转储。有multiple options to take a 32 bit dump of a 32 bit application on 64 bit OS,只要选择一个最舒服的你。
更新:this answer介绍如何使用soswow64修复位数问题。
如果这是您唯一的转储,并且几乎没有机会获得更好的转储,您可以尝试!sw切换到32位模式:
!sw
0:014> !sw Switched to 32bit mode 0:014:x86>
请注意命令提示符是如何更改的。IMHO,完全相同的效果可以通过.effmach实现
.effmach
0:014> .effmach x86 Effective machine: x86 compatible (x86) 0:014:x86>
除了明确指定!sw命令在两者之间切换的模式之外。在.NET应用程序的情况下,这些都没有帮助我,因为SOS不能处理不正确位数的转储。
2条答案
按热度按时间tv6aics11#
看起来您的应用程序是一个32位应用程序,您使用64位Taskmgr生成转储。
你应该使用ProcessExplorer,it cares about the bitness:
Process Explorer v15.3:它还创建与目标进程位数匹配的转储文件
或者从
C:\Windows\SysWOW64
运行32位Taskmgr以生成转储。yshpjwxd2#
作为already answered,您已经对一个32位应用程序进行了64位转储。有multiple options to take a 32 bit dump of a 32 bit application on 64 bit OS,只要选择一个最舒服的你。
更新:this answer介绍如何使用soswow64修复位数问题。
如果这是您唯一的转储,并且几乎没有机会获得更好的转储,您可以尝试
!sw
切换到32位模式:请注意命令提示符是如何更改的。IMHO,完全相同的效果可以通过
.effmach
实现除了明确指定
!sw
命令在两者之间切换的模式之外。在.NET应用程序的情况下,这些都没有帮助我,因为SOS不能处理不正确位数的转储。