Debuggen von fehlerhaften Dateihandles in der Windows-Konsolenanwendung
391
user2531336
Ich habe eine Konsolenanwendung, die puTTY als DLL verwendet, und ich muss die fragliche puTTY-Bibliothek debuggen.
Unter UNIX würde ich das tun strace <command>.
strace ls ggg
Würde etwas drucken wie:
stat("ggg", 0x166b0d0) = -1 ENOENT (No such file or directory)
weil ich keine Datei oder Verzeichnis gggin meinem aktuellen Verzeichnis benannt habe. Ich brauche das für eine Windows-Konsolenanwendung.
Ich habe online gesucht und das Windows SDK mit Debugging-Tools heruntergeladen. Ich habe mehrere Programme ausprobiert, cdbscheint das zu sein, das ich brauche.
Das cdb -o "!htrace -enable" <command>scheint mir das zu sein, was ich brauche, aber ich glaube, mir fehlt etwas, weil es keinen Hinweis darauf gibt, warum der Befehl fehlschlägt oder das Öffnen von Dateien fehlschlägt. (Wenn <command>eine Datei geladen wird, "sollte" sie erfolgreich sein, sie <command>will jedoch einen "Sitzungsnamen" und keinen Dateipfad, sucht dann eine Datei oder einen Registrierungsschlüssel mit diesem Sitzungsnamen.)
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>
Grundsätzlich versuche ich, um herauszufinden, wo pscp.exe (puTTY scp) lädt die Sitzung von Windows, in diesem Fall - die Beantwortung dieser Frage wird nicht helfen, ich möchte wissen, wie ich Griffe verfolgen können, von meinem Verständnis cdbermöglicht htracenach Das Programm ist abgeschlossen oder ich muss etwas eingeben, damit der Befehl startet (unsicher). Ich habe sogar versucht, einen neuen Prozess mit den Optionen aus dem Debugger zu erstellen. Es werden immer nur DLLs geladen, sonst nichts.
Ich habe es versucht logger.exe <command>und logger.exe -o <command>da stackoverflow sagt, es sei am nächsten strace, listet es die DLLs auf, genauso wie cdbnichts mehr. In windbgbekomme ich 8 Dateihandles, jedoch keine Informationen über Dateipfade ...
Sorry, ich bin ein Linux-Typ, der so verwöhnt ist und straceden Trick ohne Optionen macht.
Der einfachere Ansatz (da er wahrscheinlich aus einer Datei oder einer Registry geladen wird) wäre die Verwendung des entsprechenden [sysinternals-Tools] (https://technet.microsoft.com/de-de/sysinternals/bb545027.aspx). Sie befinden sich derzeit auf der Hardcore-Debugging-Route, was wahrscheinlich etwas für das ist, was Sie tatsächlich versuchen.
Seth vor 6 Jahren
1
Handle scheint derjenige zu sein, der dem, was ich suche, am nächsten kommt, aber er erwartet, dass ein Prozess verbleibt ... hier endet der Prozess nach etwa 1 Sekunde ... sogar "wahr"; handle -p ; done` wobei Befehl Teil des Namens ist, gibt manchmal ein paar Dateiverweise aus, aber nichts Interessantes (ich musste das Debugging aktivieren, um das Programm zu verlangsamen) ... immer noch auf der Suche nach ` [] `also ein Windows-Programm, das ein anderes ausführt und alle Datei- / Registrierungsaktivitäten des Kindes ausgibt, ala` strace`.
user2531336 vor 6 Jahren
0
Process Monitor aus dieser Suite von Tools zeigt Ihnen Live-Daten (und eine Aufzeichnung) an, welche Dateien von Programmen berührt werden. Sie könnten es nach nur einer ausführbaren Datei filtern. Es ist jedoch keine Konsolenanwendung. Entschuldigung, ich habe die regulären Debugging-Tools für Windows nicht wirklich angesprochen.
Seth vor 6 Jahren
1
Ich sehe einen Vorschlag zur Bearbeitung meiner Antwort von Ihnen. Es macht jedoch keinen Sinn, es als Antwort zur Antwort hinzuzufügen. Schließlich würde ich nicht wissen, was deine Gedanken sind. Da es tatsächlich weitere Eingaben gibt, können Sie es als unabhängige Antwort (als Referenz auf meine) oder als (mehrere) Kommentare veröffentlichen. Eine dieser Optionen würde wahrscheinlich gut passen.
Seth vor 6 Jahren
0
1 Antwort auf die Frage
1
Seth
Derzeit verwenden Sie aktuelle Debugging-Tools, die schwer zu verstehen sind und letztendlich viele Details enthalten. Zu diesem Zweck kann es eine Option sein, ein einfacheres Werkzeug zu verwenden, um die benötigten Informationen zu erhalten.
Für Windows gibt es eine Reihe von Tools, die als " sysinternals suite " bekannt sind und die Ihnen helfen könnten, ohne die gesamte Debug-Ausgabe zu verstehen, die Sie mit den eigentlichen Debug-Tools erhalten.
Insbesondere sollte der Werkzeuggriff Ihnen helfen, herauszufinden, was eine aktuell geöffnete Datei verwendet. Während der Prozessmonitor Ihnen einen Live-Feed mit einer Vielzahl von Aktionen anzeigen würde, die derzeit laufende Programme ausführen. Hauptsächlich auf Register- und Dateivorgänge ausgerichtet.
Um herauszufinden, wo ein Programm Informationen erhält, können Sie versuchen, den Prozessmonitor zu verwenden und so einzurichten, dass nur die Aktionen eines bestimmten Programms angezeigt werden. Das Tool selbst verfügt über Filteroptionen für verschiedene Arten von Aktionen sowie für die Eigenschaften dieser Aktionen.