2015-11-04 120 views
4

.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的小工具是一件簡單的工作,但我更喜歡不這樣做。

回答

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

^會發現任何行的開頭,所以它應該是一個1:1拷貝。

+0

不要以爲我會曾經想過這個問題... – mark

0

,你也可以使用的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) 
相關問題