说明:本文很早就发布在我的博客上了,当时总结的有些问题,本次重新整理完善后再次发布。
前言
有时候我们非常想知道当前系统内核的一些状态,比如查看当前系统加载了哪些驱动,查看某个进程外 COM 调用卡在哪里了,等等。如果我们可以调试系统内核,或者抓取一个系统转储来做事后调试,该多好啊。我们可以通过如下方法得到系统转储:
1. 双机内核调试(需要另外一台机器来做双机调试)
2. 让系统崩溃(可以使用 sysinternals中的 notmyfault 或者 使用快捷键让系统崩溃,并设置 系统崩溃的时候自动保存转储文件)(有点小题大作了)。
3. 使用 sysinternals 中的 livekd,不需要特殊设置,绿色环保。
以上几种方案中,使用 livekd 最方便快捷。如果有哪位小伙伴儿对其它几种方法感兴趣,可以查看之前的转储系列文章。为了能顺利使用 livekd,我们需要解决几个问题。
使用帮助
可以运行
livekd -?来查看使用方法。
通过
-k来指定kd.exe的路径。通过
-m来指定使用windbg而不是kd.exe作为内核调试器。可以传递参数给
kd.exe或者windbg.exe。
问题总结
1. 使用 livekd 进行本地内核调试,需要管理员权限,没以管理员权限运行会给出对应的错误提示。
2. livekd 需要内核文件的调试符号的支持。可以通过环境变量 _NT_SYMBOL_PATH 来告诉 livekd 到哪里加载调试符号。如果没设置也没关系,livekd 会自动下载需要的调试符号到某个位置,遇到下图的情况,输入y即可。

也可以通过命令行参数
-y来指定符号路径。与使用_NT_SYMBOL_PATH效果一样。最好设置环境变量_NT_SYMBOL_PATH,对所有调试器都有用。我本地的设置为:
_NT_SYMBOL_PATH=SRV*C:\mssymbols\*http://msdl.microsoft.com/download/symbols
3. livekd 需要内核调试器(kd.exe 或 windbg.exe)的支持,可以通过命令行参数 -k 指定 kd.exe 的完整路径。通过 -k 参数指定 kd.exe

本文介绍了如何使用livekd进行本地内核调试,包括需要解决的问题,如管理员权限、调试符号支持、内核调试器配置等。此外,还强调了调试符号在调试过程中的重要性,并提供了解决加载符号文件问题的建议。
最低0.47元/天 解锁文章
972

被折叠的 条评论
为什么被折叠?



