我有一个Windows应用程序,我们开发用于室内使用。由于Windows错误处理,窗口保持打开状态,我可以轻松地从任务管理器生成故障转储。
之前我曾经通过eclipse在linux上使用了崩溃转储,但这是Windows上的第一次。
服务器是Windows 2012,我的开发机器是Windows 7。
当我在Windbg中加载崩溃转储时,加载我的符号,然后选择查看调用堆栈,唯一的列表是:
如何具体查看我的应用程序调用堆栈?
答案 0 :(得分:8)
您的应用程序看起来像是一个32位应用程序而您使用64位任务管理器来生成转储。
您应该使用ProcessExplorer代替it cares about the bitness:
Process Explorer v15.3:它还会创建与之匹配的转储文件 目标过程的位数
或者从C:\Windows\SysWOW64
运行32Bit Taskmgr以生成转储。
答案 1 :(得分:4)
作为already answered,您已经对32位应用程序进行了64位转储。有multiple options to take a 32 bit dump of a 32 bit application on 64 bit OS,只需选择最适合您的那个。
如果这是您唯一的转储并且几乎没有机会获得更好的转储,您可以尝试!sw
切换到32位模式:
0:014> !sw
Switched to 32bit mode
0:014:x86>
请注意命令提示符的更改方式。恕我直言,.effmach
0:014> .effmach x86
Effective machine: x86 compatible (x86)
0:014:x86>
除了您明确指定模式,!sw
命令在两者之间切换。
对于.NET应用程序,这些都没有帮助过我,因为SOS无法处理不正确的转储。