如何将windbg命令重定向到文件而不在windbg控制台上回显输出?

问题描述:

.logopen不是答案,因为它让命令输出到windbg控制台。如何将windbg命令重定向到文件而不在windbg控制台上回显输出?

例如,!sosex.dumpgen 2会产生很多输出,我不想在调试器控制台中看到它。现在,我使用下列内容:

.shell -i- -ci "!dumpgen 2" cmd /c more > D:\tmp\dumpgen2.log 

我的问题是,more命令是交互式的,需要输出一定量的数据后,用户输入。这对我来说是一个巨大的问题。

一种解决方案可能是使用脚本非交互式地运行调试器,并在其中使用.logopen命令。

我想如果我能达到我想要的,而:

  1. 从交互式会话的WinDbg
  2. 否则它使用普通的标准外壳命令(也可能是CMD.EXE或powershell.exe)。我知道编写一个只需将stdin转发到stdout的小工具是一件简单的工作,但我更喜欢不这样做。

.shell -i- -ci "!dumpgen 2" findstr "^" >D:\tmp\dumpgen2.log 

^会发现任何行的开头,所以它应该是一个1:1拷贝。

+0

不要以为我会曾经想过这个问题... – mark

,你也可以使用的GnuWin32猫

C:\>dir /b foogg.txt 
File Not Found 

C:> CDB -c” .shell -ci \ “LM \” -o \ “C:\\ foogg.txt \” 猫 - 如果文件存在“的calc.exe

0:000> cdb: Reading initial command '.shell -ci "lm" -o "c:\\\\foogg.txt" cat -' 

<.shell waiting 10 second(s) for process> 
.shell: Process exited 
0:000> q 
quit: 

检查和打印内容

C:\>dir /b foogg.txt 
foogg.txt 

C:\>cat foogg.txt 

start end  module name 
01000000 0101f000 calc  (deferred) 
77c10000 77c68000 msvcrt  (deferred) 
77dd0000 77e6b000 ADVAPI32 (deferred) 
77e70000 77f02000 RPCRT4  (deferred) 
77f10000 77f59000 GDI32  (deferred) 
77f60000 77fd6000 SHLWAPI (deferred) 
77fe0000 77ff1000 Secur32 (deferred) 
7c800000 7c8f6000 kernel32 (deferred) 
7c900000 7c9b2000 ntdll  (pdb symbols) 
7c9c0000 7d1d7000 SHELL32 (deferred) 
7e410000 7e4a1000 USER32  (deferred)