使附加到本地内核的 windbg 或 kd 表现得像系统范围的 strace

Make windbg or kd attached to local kernel behave like system wide strace

我是 运行 Windows 7,我想在上面进行内核调试,我不想弄乱引导加载程序。所以我按照建议下载了LiveKd here and make it run and seems it is working. If I understand correct it is some kind of read only debugging. Here 提到它非常有限,甚至无法使用断点。我想问一下在这种模式下是否可以定期转储正在执行的所有指令或基本上所有在当前 OS 上发生的事件?我想要一些系统范围的 strace(Linux 用户知道)并对此进行一些统计分析。我想这取决于更多因素,例如安装的调试符号才能开始解析地址等。

我不确定调试器是否是可用于跟踪实时系统调用的最佳工具。正如你提到的 LiveKd 会话非常有限,你不能在其中放置断点(否则你会挂起你自己的系统)。但是,您仍然可以使用 .dump 命令创建内存转储(查看 windbg 帮助:.hh .dump)。请记住,获取 运行 系统的完整转储 (/f) 可能需要很长时间。

回到您的问题主题,通过使用 "dump approach" 您将错过许多系统调用,因为您将只有给定时间点的系统快照。因此,如果您正在寻找类似于 Linux strace 的东西,我建议您检查这些工具:

  • Process Monitor (procmon) - 这个工具会显示系统中的所有 I/O 请求,以及在注册表或进程上执行的操作 activity 事件
  • Windows Performance Toolkit - 它包含用于收集 (WPR) 和分析 (WPA) 系统和应用程序跟踪事件的工具。这可能是很多事件,根据您的需要过滤它们非常重要。 ETW(Windows 的事件跟踪)是一个庞大的主题,您可能需要阅读一些教程或书籍才能有效地使用它(但它确实值得!)。
  • API Monitor - 它是众多(我认为它是最好的之一)跟踪应用程序之一 - 此工具将允许您跟踪任何 运行 进程中的方法调用。它有一个漂亮的界面,甚至允许你在你想要拦截的方法上放置断点。

还有许多其他工具可用于在 Windows 上进行跟踪,但我将从上面列出的工具开始。您也可以查阅一本关于此主题的好书:Inside Windows Debugging。祝你好运! :)