过滤windbg的输出

时间:2017-02-10 07:05:21

标签: windbg

我试图过滤命令的输出,例如lm的输出太长。

lm | find "some_string"类似的东西。

windbg支持吗?我无法在网上找到任何关于它的文件。

4 个答案:

答案 0 :(得分:5)

我通常使用.shell命令,使用windows工具(如findstr)或使用cygwin安装的二进制文件。 .shell command help from MSDN

示例:

Windbg版本,虽然这也适用于旧版本:

0:000> version
[snip]
Microsoft (R) Windows Debugger Version 10.0.14321.1024 X86
Copyright (c) Microsoft Corporation. All rights reserved.

开始记事本

0:000> |
.  0    id: 31a0    create  name: notepad.exe

列出模块:

0:000> lm
start    end        module name
00030000 0006e000   notepad    (deferred)             
52270000 52280000   FeClient   (deferred)             
6d360000 6d4af000   PROPSYS    (deferred)             
6f650000 6f879000   iertutil   (deferred)             
6f880000 6fa14000   urlmon     (deferred)             
73c40000 73c5b000   bcrypt     (deferred)             
73dc0000 73e2a000   WINSPOOL   (deferred)             
73ee0000 740ea000   COMCTL32   (deferred)             
74130000 7413a000   CRYPTBASE   (deferred)             
74140000 7415e000   SspiCli    (deferred)             
746b0000 7472b000   msvcp_win   (deferred)             
74730000 7488f000   USER32     (deferred)             
74890000 74970000   KERNEL32   (deferred)             
749d0000 74a58000   shcore     (deferred)             
[snip]

使用Windows findstr获取所有带有“kern”(不区分大小写)

的模块
0:000> .shell -ci "lm" findstr /i kern
74890000 74970000   KERNEL32   (deferred)             
76ac0000 76acd000   kernel_appcore   (deferred)             
77530000 776d1000   KERNELBASE   (deferred)             
.shell: Process exited

与grep.exe相同(来自cygwin,位于我的%PATH%

0:000> .shell -ci "lm" grep.exe -i kern
74890000 74970000   KERNEL32   (deferred)             
76ac0000 76acd000   kernel_appcore   (deferred)             
77530000 776d1000   KERNELBASE   (deferred)             
.shell: Process exited

[编辑]

这个命令非常强大,因为你可以轻松地将windbg的命令输出发送给脚本解释器(我在工作中使用了很多python):

.shell -ci "<windbg command>" python mypythonscript.py

答案 1 :(得分:5)

我刚刚写了Grep-like WinDbg extension,如果符合您的要求,请尝试回复我。

支持的命令如下:

 bool is_in(unordered_set<string>& S, string P)
 {
       auto it = S.find(P);
       return (it != S.end());
 }

答案 2 :(得分:3)

如果你不能使用shell,那么像denis这样的domdbg扩展很少。 Mex by microsoft等提供grep / findstr实现。所以你可以像使用它一样。 !grep foo&#34; lm&#34;

答案 3 :(得分:0)

WinDbg内置了对某些命令进行过滤的支持,例如您作为示例给出的lm命令:

lm m *kern*

Neitsa’s answer相比,优点是输出中的可单击链接仍然存在,因此您可以看到模块的路径。