在WinDBG中使用foreach
我们可以使用.foreach命令来加工一个或多个debugger命令的输出结果, 可以把结果集中的每一条结果作为参数传递给一个或多个其他的命令.
语法:
.foreach [Options] ( Variable { InCommands } ) { OutCommands }
.foreach [Options] /s ( Variable "InString" ) { OutCommands }
.foreach [Options] /f ( Variable "InFile" ) { OutCommands }
/pS InitialSkipNumber
会引发初始的一些token被忽略, InitialSkipNumber 代表着InCommands里的被跳过的由空格分开的字符串的个数.
/ps SkipNumber
这个选项会在每处理一个结果条目的时候都重复跳过的空格隔开的字符串的个数. 每次一个token被传递给OutCommands之前, SkipNumber个token会被跳过.
Variable
为每一条InCommands的结果起的变量的名字.
/s
采用字符串作为输入项的集合.
/f
输入项的集合在文件当中.
一些命令举例:
.foreach /pS 1 /ps 1 /f (o "c:\guids.txt") {dt GUID ${o}}
语法意义: 跳过第一个token, 然后每处理一行的时候都跳过一个token, 从c:\guids.txt中读入的每一行作为变量0, 传递给命令dt GUID ${o}.
实际应用: 该命令可以处理类似这样的文件:
[0] 3847574…9920394
[1] 3847583…u920123
[2] 3847574…9920454
………
[40] 3947576...8285572
把[n] 后面的数字转换为GUID类型显示出来.
.foreach(myVariable {!dumpheap -type System.String -min 6500 -short}){!do myVariable;.echo *************}
具体意义, 请详见Using WinDbg - Advanced commands
参考资料:
WinDBG帮助
Using WinDbg - Advanced commands
http://blogs.msdn.com/b/johan/archive/2008/01/23/using-windbg-advanced-commands.aspx