不使用符号调试用户模式进程

在针对用户模式故障启动调试器之前,在出错的计算机上具有符号非常重要。 但是,有时调试器在没有符号的情况下启动。 如果问题很容易重现,则只需复制符号并重新运行。 但是,如果问题可能不会再次出现,仍然可以从故障中收集一些信息:

  1. 若要弄清楚地址的含义,需要一台与错误匹配的计算机。 它应具有同一平台 (x86 或 x64) ,并使用相同版本的 Windows 进行加载。

  2. 配置计算机后,将用户模式符号和要调试的二进制文件复制到新计算机上。

  3. 在无符号计算机上启动 CDB 或 WinDbg。

  4. 如果不知道哪个应用程序在无符号计算机上失败,请发出 | (进程状态) 命令。 如果这未提供名称,请在无符号计算机上进入 KD,然后执行 !process 0 0,查找 CDB 命令提供的进程 ID。

  5. 如果设置了两个调试器(一个具有未命中错误的符号,另一个已命中错误,但没有符号),则会在无符号计算机上发出 k (Display Stack Backtrace) 命令。

  6. 在具有符号的计算机上,针对无符号堆栈上给出的每个地址发出 u (Unassemble) 命令。 这将为你提供无符号计算机上错误的堆栈跟踪。

  7. 通过查看堆栈跟踪,可以看到调用中涉及的模块和函数名称。