我捕获了在64位Windows操作系统上运行的32位.NET应用程序的崩溃转储。在分析过程中,有人发现我有一个64位的转储,并告诉我由于错误的位数无法分析此转储。
当使用Windows任务管理器创建转储时,我并不知道自己在做错了什么。这对32位操作系统总是有效的。
如何为.NET创建正确位数的好的转储文件?
我捕获了在64位Windows操作系统上运行的32位.NET应用程序的崩溃转储。在分析过程中,有人发现我有一个64位的转储,并告诉我由于错误的位数无法分析此转储。
当使用Windows任务管理器创建转储时,我并不知道自己在做错了什么。这对32位操作系统总是有效的。
如何为.NET创建正确位数的好的转储文件?
对于.NET应用程序,位数很重要,原因如下:
尽管理论上应该包含所有必要的信息,但不可能将64位的dump转换为32位。
如果你感到幸运,也可以尝试一些指令。
如果您不知道位数,可以按照以下步骤找出它:
在Windows 7任务管理器中,进程显示* 32
:
在Windows 8任务管理器中,转到“详细信息”选项卡并添加名为“平台”的列:
Visual Studio在附加到进程时显示位数:
Process Explorer可以配置为显示“图像类型”列:
自动检测位数的程序:
捕获具有特定位数的Dump文件的工具:
-64
命令行开关运行只需根据您的应用程序选择位数,而不是根据操作系统选择。
对于.NET,您需要完整的内存Dump文件,否则无法确定对象的内容。 若要包括完整的内存,请执行以下操作:
.dump
时指定/ma
-ma
命令行开关DumpType
设置为2
我发现许多开发人员甚至不知道Visual Studio可以创建转储文件。原因可能是菜单长时间不可见。以下是步骤:
可能只是为了调试WoW64层本身。