Как перенаправить команду windbg в файл, не отображая вывод на консоль windbg?
.logopen
это не ответ, потому что он позволяет выводить команду на консоль windbg.
Например, !sosex.dumpgen 2
производит чертовски много выходных данных, которые я не хочу видеть в консоли отладчика. Прямо сейчас я использую следующее:
.shell -i- -ci "!dumpgen 2" cmd /c more > D:\tmp\dumpgen2.log
Моя проблема в том, что more
Команда является интерактивной и требует ввода данных пользователем после вывода определенного количества данных. Это огромная проблема для меня.
Одним из решений может быть запуск самого отладчика не в интерактивном режиме со скриптом и использование там команды.logopen.
Интересно, смогу ли я достичь того, чего хочу, пока:
- Делаем это из интерактивного сеанса WinDbg
- Использование простых стандартных команд оболочки (которые также могут быть cmd.exe или powershell.exe). Я знаю, что написание небольшой утилиты, которая просто перенаправляет stdin на stdout, - тривиальная часть работы, но все же я предпочитаю не делать этого.
2 ответа
.shell -i- -ci "!dumpgen 2" findstr "^" >D:\tmp\dumpgen2.log
^
найдет начало любой строки, поэтому это должна быть копия 1:1.
Вы также можете использовать кошку gnuwin32
C:\>dir /b foogg.txt
File Not Found
C:>cdb -c ".shell -ci \"lm\" -o \"c:\\foogg.txt\" cat -" 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)