Отладка неисправных файловых дескрипторов в приложении Windows Console

Отладка неисправных файловых дескрипторов в приложении Windows Console

У меня есть консольное приложение, которое использует puTTY как DLL, и мне нужно отладить соответствующую библиотеку puTTY.

В UNIX я бы сделал strace <command>.

strace ls ggg

Выведет что-то вроде:

stat("ggg", 0x166b0d0)                  = -1 ENOENT (No such file or directory)

потому что у меня нет файла или каталога с именем gggв моем текущем каталоге. Мне это нужно для консольного приложения Windows.

Я поискал в интернете, скачал Windows SDK с инструментами отладки. Я перепробовал несколько программ, cdbпохоже, это то, что мне нужно.

Похоже cdb -o "!htrace -enable" <command>, что это то, что мне нужно, но я думаю, что я что-то упускаю, потому что это не дает никаких подсказок о том, почему команда не выполняется или не удается открыть файл. (если <command>загружает файл, то «должен» выполниться успешно, однако <command>хочет имя «сеанса», а не путь к файлу, затем он ищет файл или раздел реестра с этим именем сеанса):

CommandLine: <command>
Symbol search path is: srv*
Executable search path is:
ModLoad: 00400000 004a7000   image00400000
ModLoad: 77d00000 77e8d000   ntdll.dll
ModLoad: 77aa0000 77b70000   C:\WINDOWS\SysWOW64\KERNEL32.DLL
ModLoad: 748e0000 74ab7000   C:\WINDOWS\SysWOW64\KERNELBASE.dll
ModLoad: 779d0000 77a36000   C:\WINDOWS\SysWOW64\WS2_32.dll
ModLoad: 77b70000 77c2e000   C:\WINDOWS\SysWOW64\RPCRT4.dll
ModLoad: 74720000 74740000   C:\WINDOWS\SysWOW64\SspiCli.dll
ModLoad: 74710000 7471a000   C:\WINDOWS\SysWOW64\CRYPTBASE.dll
ModLoad: 74f00000 74f57000   C:\WINDOWS\SysWOW64\bcryptPrimitives.dll
ModLoad: 75d10000 75d53000   C:\WINDOWS\SysWOW64\sechost.dll
ModLoad: 757c0000 75838000   C:\WINDOWS\SysWOW64\ADVAPI32.dll
ModLoad: 776b0000 7776d000   C:\WINDOWS\SysWOW64\msvcrt.dll
(2f550.32120): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000010 ecx=44ce0000 edx=00000000 esi=00249000 edi=77d06964
eip=77dadbcf esp=00cafa0c ebp=00cafa38 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6af:
77dadbcf cc              int     3
0:000> cdb: Reading initial command '!htrace -enable'
Handle tracing enabled.
Handle tracing information snapshot successfully taken.
0:000>

По сути, я пытаюсь выяснить, откуда pscp.exe (puTTY scp) загружает сеанс в Windows, в данном случае ответ на этот вопрос не поможет, я хочу знать, как я могу отслеживать дескрипторы, насколько я понимаю, cdbвключается ли htraceпосле завершения программы или мне нужно что-то ввести для запуска команды (не уверен), я даже пытался создать новый процесс с параметрами из отладчика, но все равно загружаются только DLL и ничего больше.

Я попробовал logger.exe <command>и logger.exe -o <command>какпереполнение стекаговорит, что он ближе всего к strace, он перечисляет DLL, как и cdb, ничего больше. В windbg, я вижу 8 дескрипторов файлов, однако, никакой информации о путях к файлам ...

Извините, я Linux-пользователь, поэтому избалован и straceне имею никаких вариантов.

Я прочитал:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-handle https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/cdb-command-line-options https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-a-user-mode-process-using-cdb https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-create--create-process-(чтобы попробовать запустить <command>после загрузки отладчика) ... и еще несколько ...

решение1

В настоящее время вы используете реальные инструменты отладки, которые могут быть довольно сложными для понимания, но в конечном итоге предоставляют много подробностей. С вашей целью это может быть вариантом использовать более простой инструмент, чтобы получить необходимую информацию.

Для Windows доступно довольно много инструментов, известных как "sysinternals набор", которые могут вам помочь, не требуя понимания всех отладочных результатов, которые вы получаете с помощью реальных инструментов отладки.

В частности, дескриптор инструмента должен помочь вам выяснить, что использует текущий открытый файл. В то время как монитор процесса покажет вам прямую трансляцию множества действий, которые выполняют текущие запущенные программы. В основном сосредоточен на операциях с реестром и файлами.

Чтобы выяснить, откуда программа получает информацию, вы можете попробовать использовать Process Monitor и настроить его так, чтобы он показывал вам только действия определенной программы. Сам инструмент имеет параметры фильтрации для различных типов действий, а также для свойств этих действий.

Связанный контент