windbg 分析 32 位进程的 64 位转储文件

场景:

x86 的项目在 x64 的 windows 机器上运行时出现未响应的情况,使用任务管理器创建该进程的转储文件

因为项目是 32 位的,所以使用 x86 的 windbg 来调试 dmp 文件,使用 kn 列出堆栈信息,出现了一些与项目代码无关的函数调用

 

后面研究发现,这个调用都是 wow64 模块处理 64 位 Windows 上的 32 位应用程序,所以无法识别堆栈,需要切换到该 32 位进程转储的 32 位视图

输入下图所展示的命令

即可切换到 32 位视图,再输入 kn 就可以查看堆栈

 

发现是 WaitForSingleObject 一直在等待线程的结束,导致程序未响应,最终对这块代码优化处理

笔记:

调试 dmp 文件时最好加载程序的符号文件(.pdb 文件),注意加载时输入符号文件的文件夹路径,并 .reload

查看是否加载成功,可以输入 lm 查看模块,加载成功的符合文件会显示在 dll 文件后面,比如

 

 相关链接:How to Find Crash in Windbg Log?

posted @ 2022-11-30 17:56  strive-sun  阅读(282)  评论(0编辑  收藏  举报