在启动调试器调试用户模式错误之前获得符号文件是很重要的。但是有时候调试器在没有符号的情况下启动起来。如果问题很容易重现,可以复制符号再来一次。但是如果问题难以重现,还是可以搜集一些错误的信息:
- 要计算出地址的意义,需要有一台和出问题的机器一样的计算机。他需要有相同的平台 (x86、Intel
Itanium或x64)并且加载相同版本的Windows。
- 配置好计算机后,将用户模式符号和二进制文件复制到用于调试的新机器上。
- 在没有符号的机器上启动CDB或WinDbg。
- 如果不知道无符号及其上哪个程序出错了,可以使用| (Process Status)命令。如果这样不能知道名字,在无符号机器上中断到KD,并执行!process 0 0,查找CDB命令中给出的进程ID。
- 设置好了两个调试器之后 — 一个有符号但是没有遇到错误,另一个遇到错误但是没有符号——在无符号机器上执行k (Display Stack Backtrace)命令。
- 在有符号机器上,对每个无符号机器上调用堆栈显示出来的地址执行u (Unassemble)命令。这样就可以得到无符号机器上的错误的调用堆栈。
- 通过查看调用堆栈,可以找到调用相关的模块和函数。
Build machine: CAPEBUILD