本地内核调试神器:livekd 使用总结

栏目: IT技术 · 发布时间: 3年前

内容简介:说明:本文很早就发布在我的博客上了,当时总结的有些问题,本次重新整理完善后再次发布。猜你喜欢:转储文件系列:

说明:本文很早就发布在我的博客上了,当时总结的有些问题,本次重新整理完善后再次发布。

前言

有时候我们非常想知道当前系统内核的一些状态,比如查看当前系统加载了哪些驱动,查看某个进程外 COM 调用卡在哪里了,等等。如果我们可以调试系统内核,或者抓取一个系统转储来做事后调试,该多好啊。我们可以通过如下方法得到系统转储:

1. 双机内核调试(需要另外一台机器来做双机调试)

2. 让系统崩溃(可以使用 sysinternals 中的 notmyfault 或者 使用快捷键让系统崩溃,并设置 系统崩溃的时候自动保存转储文件)(有点小题大作了)。

3.  使用 sysinternals 中的 livekd ,不需要特殊设置,绿色环保。

以上几种方案中,使用 livekd 最方便快捷。如果有哪位小伙伴儿对其它几种方法感兴趣,可以查看之前的转储系列文章。为了能顺利使用 livekd ,我们需要解决几个问题。

使用帮助

  1. 可以运行 livekd -? 来查看使用方法。 本地内核调试神器:livekd 使用总结
  • 通过 -k 来指定 kd.exe 的路径。
  • -m
    windbg
    kd.exe
    
  • 可以传递参数给 kd.exe 或者 windbg.exe

问题总结

1. 使用 livekd 进行本地内核调试,需要管理员权限,没以管理员权限运行会给出对应的错误提示。 本地内核调试神器:livekd 使用总结

2. livekd 需要内核文件的调试符号的支持。 可以通过环境变量 _NT_SYMBOL_PATH 来告诉 livekd 到哪里加载调试符号。 如果没设置也没关系, livekd 会自动下载需要的调试符号到某个位置,遇到下图的情况,输入 y 即可。

本地内核调试神器:livekd 使用总结

  • 也可以通过命令行参数 -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 使用总结

4. 下载符号文件需要 symsrv.dlldbghelp.dll 的支持,请确保 livekd 可以顺利加载这两个文件。 本地内核调试神器:livekd 使用总结 如果出现上图中的错误,请按照提示加上 -vsym 再次运行,可以查看到更详细的问题。我这里是因为不能加载 symsrv.dll 导致的。 本地内核调试神器:livekd 使用总结

5. 如果以上都已经设置正确,但还是报错,可以使用 -vsym 参数查看具体的错误提示。因为最近微软符号服务器在国内连接有点困难。所以大概率会遇到下面的问题。

本地内核调试神器:livekd 使用总结
livekd-can-not-find-nt-kernel-symbol

遇到这个问题,没有什么好的解决办法。只能想办法连上微软符号服务器,或者先下载一份对应的文件,放到对应的查找路径下。

说明:

  • kd.exe
    livekd.exe
    64
    64
    livekd.exe
    kd.exe
    symsrv.dll
    livekd.exe
    kd.exe
    symsrv.dll
    
  • 如果还是找不到依赖的文件,我们可以把依赖的文件拷贝到 livekd.exe 同目录下再运行。

6. 如果以上几步设置好了,运行 livekd 应该没问题了。剩下的就是通过 livekd -? 来熟悉用法了,祝各位好运。贴一张正常运行的效果图。 本地内核调试神器:livekd 使用总结

说明:如果之前没加载过符号文件的话,可能会花一定的时间加载符号。请耐心等待。

总结

  • livekd 可以非常方便的获取一份系统转储,不用预先做任何设置,真是太有用了。

  • -vsym 可谓是排查 livekd 不能正常工作的首要选项。遇到问题,加上它就对了。

  • 调试符号对于调试是极其重要的。

猜你喜欢:

转储文件系列:

转储文件知多少

你需要知道的 N 种抓取 dump 的工具

你生成的转储文件有问题吗?

向大厂看齐!为自己的程序增加自动转储的功能!

内核转储,开抓啦!

蓝屏(BSOD)转储设置,看本文就够了!

系统蓝屏的几种姿势,确定不了解下么?

本地内核调试环境搭建,就这么简单!

双机内核调试 101

使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境

调试系列:

调试实战——你知道怎么使用DebugView查看调试信息吗?

调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

调试实战——崩溃在ComFriendlyWaitMtaThreadProc

调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

调试实战——调试PInvoke导致的内存破坏

调试实战——调试excel启动时死锁

调试实战——调试DLL卸载时的死锁

调试实战——调试TerminateThread导致的死锁

排错系列:

排错实战——1分钟解救 run 不出来的 Autoruns

排错实战——VS清空最近打开的工程记录

排错实战——拯救加载调试符号失败的IDA

排错实战——你知道拖动窗口时只显示虚框怎么设置吗?

排错实战——解决Tekla通过.tsep安装插件失败的问题

排错实战——使用process explorer替换任务管理器

排错实战——通过对比分析sysinternals事件修复程序功能异常

VS 系列:

排错实战——解决c++编译错误:error C2059: illegal token on right side of '::'

善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误

欢迎留言交流!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习系统设计

机器学习系统设计

[德] Willi Richert、Luis Pedro Coelho / 刘峰 / 人民邮电出版社 / 2014-7-1 / CNY 49.00

如今,机器学习正在互联网上下掀起热潮,而Python则是非常适合开发机器学习系统的一门优秀语言。作为动态语言,它支持快速探索和实验,并且针对Python的机器学习算法库的数量也与日俱增。本书最大的特色,就是结合实例分析教会读者如何通过机器学习解决实际问题。 本书将向读者展示如何从原始数据中发现模式,首先从Python与机器学习的关系讲起,再介绍一些库,然后就开始基于数据集进行比较正式的项目开......一起来看看 《机器学习系统设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具