Scripting Windbg脚本在.foreach、.if、!中使用as/c!对于每个本地

Scripting Windbg脚本在.foreach、.if、!中使用as/c!对于每个本地,scripting,alias,windbg,Scripting,Alias,Windbg,我的目标是存储名为this的对象的类名,该对象位于帧的局部区域中。当您查看这一系列命令时,我是否违反了某些Windbg语法规则,即as命令似乎不会抛出任何错误,但也不会按照我的意愿设置别名 这让我有点困惑,因为别名显然是在我之前使用的隔离的.foreach命令中设置的,现在我只是将其嵌套(尽管我也尝试了as/c与.printf结合使用) 0:133> ad /q * 0:133> al No aliases 0:133> .foreach /pS 1 /ps 4 (Token

我的目标是存储名为
this
的对象的类名,该对象位于帧的局部区域中。当您查看这一系列命令时,我是否违反了某些Windbg语法规则,即
as
命令似乎不会抛出任何错误,但也不会按照我的意愿设置别名

这让我有点困惑,因为别名显然是在我之前使用的隔离的
.foreach
命令中设置的,现在我只是将其嵌套(尽管我也尝试了
as/c
.printf
结合使用)

0:133> ad /q *
0:133> al
No aliases
0:133> .foreach /pS 1 /ps 4 (Token {dv /t this}) { as myClass Token }
0:133> al
  Alias            Value  
 -------          ------- 
 myClass          foo  
0:133> ad /q *
0:133> al
No aliases
0:133> !for_each_local .if ($spat ("@#Local","this") == 1) { .foreach /pS 1 /ps 4 (Token { dv /t this }) { .printf "${Token}\n" } }
foo
0:133> !for_each_local .if ($spat ("@#Local","this") == 1) { .foreach /pS 1 /ps 4 (Token { dv /t this }) { as myClass Token } }
0:133> al
No aliases
0:133> !for_each_local .if ($spat ("@#Local","this") == 1) { .foreach /pS 1 /ps 4 (Token { dv /t this }) { as /c myClass .printf "${Token}" } }
0:133> al
No aliases
这看起来像是一个复杂的
as
,我也可以愉快地使用
.echo${Token}
,但我不能将
as
${Token}
一起使用。我尝试过将
组合为
和分号,但没有效果,我确信这只是一个语法问题,这是有文档记录的,但我再也看不到树木的树木了

最后一次尝试,我尝试了-
!如果($spat(“@#local”,“this”)==1{.foreach/ps1/ps4(Token{dv/t this}){as/c myClass.echo${Token}}
-bah

扩展命令(
-commands;bang命令)通常不能很好地处理别名

您可以使用简化的命令来尝试:

0:000> al
No aliases
0:000> !for_each_module as x y
0:000> al
No aliases
您可以尝试通过让命令将其结果输出到控制台,然后使用非扩展命令处理该输出,从而绕过此限制

对于简化示例:

0:000> ad *
0:000> al
No aliases
0:000> .foreach (Token {!for_each_module .echo y}) {;as x Token}
0:000> al
  Alias            Value  
 -------          ------- 
 x                y 
 y                y 
注意别名在第二次扩展时是如何扩展的。您可以尝试使用更多的
/ps
参数来避免这种情况

您的命令可能会变得像以下命令一样丑陋:

.foreach /ps 1000 (result { !for_each_local .if ($spat ("@#Local","this") == 1) { .foreach /pS 1 /ps 4 (Token { dv /t this }) { .printf "${Token}\n" } }}) {;as myClass result}

丑陋?真漂亮!