Debugging Tools for Windows

.shell (Command Shell)

.shell 命令启动一个shell进程并将他的输出重定向到调试器或指定的文件。

语法

.shell [Options] [ShellCommand
.shell -i InFile [-o OutFile [-e ErrFile]] [OptionsShellCommand 

参数

InFile
指定用作输入的文件路径和名字。如果不打算为命令提供输入,可以指定一个连字符(-)来替代InFile,连字符前面不带空格。
OutFile
指定用作标准输出的路径和文件名。如果省略-o OutFile,输出被发送给调试器命令窗口。如果不希望输出被显示或者保存到文件中,可以指定一个前面不带空格的连字号(-) 来替代OutFile
ErrFile
指定用作错误输出的路径和文件名。如果省略-e ErrFile,则错误输出被发送到和标准输出相同的地方。如果不希望把输出显示或保存到文件,可以指定一个前面不带空格的连字号(-) 来替代ErrFile
Options
可以是任意多个下面的选项:
-ci "Commands"
执行指定的调试器命令,然后将他们的输出作为要创建的进程的输入文件。Commands 可以是任意多个用分号分隔的调试器命令,用引号括起来。
-x
使创建的进程完全脱离调试器。在调试会话结束后这些进程还是可以继续运行。

ShellCommand
指定程序命令行或者要执行的Microsoft MS-DOS命令。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

.shell 命令后的整行都会被当作Windows命令 (即使包含分号)。该行不能用引号括起来。在.shellShellCommand 之间必须有空格(多余的前导空格被忽略)。

如果没有使用-o OutFile 参数,则命令输出会出现在调试器命令窗口中。

执行不带参数的 .shell命令会激活shell并保持打开。之后的所有命令都会被当作Windows命令。这是调试器会显示<.shell process may need input>的信息,并且WinDbg提示符变成 Input> 。有时候如果调试器保持该shell打开,会出现一个另外的命令提示符窗口。应该无视该窗口,而所有的输入输出都通过调试器命令窗口进行。

要关闭shell并返回到调试器本身,可以键入exit.shell_quit。 (.shell_quit 命令要更强大,因为即使shell被冻结时也可以工作。)

调试CSRSS时不能使用该命令,因为CSRSS非活动时不能创建新进程。

可以使用-ci 标志来运行一个或多个调试器命令,并且将输出传递给shell进程作为输入。例如,可以将!process 0 7 命令的输出使用如下命令传递给一个Perl脚本:

0:000> .shell -ci "!process 0 7" perl.exe parsemyoutput.pl 

附加信息

关于访问命令shell的其他方法,查看使用Shell命令

Build machine: CAPEBUILD