Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Der Debugger unter VC++ und DirectX

Star / 3 Antworten / Baumansicht Nickles

Hi Leute !

Ich hab 2 Fragen zum Debugger unter Visual C++ 6.0:

1.) Der Befehl "OutputDebugString" ermöglicht es mir, einen String an das Debug-Fenster der VC++-Anwendung zu senden! Das möchte ich natürlich nur machen, wenn der Debugger auch tatsächlich läuft!
Gibt es eine Möglichkeit das herauszufinden (über ein Makro??)
2.) Dieser o. g. "OutputDebugString" nutzt unter DirectX nur solange was, wie die Anwendung nicht den ganzen Rechner zum abstürzen bringt. Ist das der Fall, so wird beim erneuten Starten von VC++ dieses Debug-Fenster geleert, und alle Infos sind futsch . . .
Hat einer von euch vielleicht einen Tip, wie man besser Debuggen kann???
Ich hab z. B. mal was von einem Terminal oder Konsolen Debugger gehört, da schließt man wohl einen kleinen 2. PC an, an den dann die Ausgabe geleitet wird, ich habe das Dokument aber damals nicht verstanden ( und nun hab ich es nicht mehr . . . )
Eine einfache Ausgabe in eine Text-Datei würde mir mittlerweile auch schon reichen . . .

Vielen Dank schonmal für eure zahlreichen Tips . . . ;-)







bei Antwort benachrichtigen
thomas woelfer Star „Der Debugger unter VC++ und DirectX“
Optionen

hi.

OutputDebugString() tut nichts, wenn die anwendung nicht vom debugger geladenwurde un der system debugger nicht aktiv ist. du kannst aber ausserdem

#ifdef _DEBUG
#endif

um den aufruf rumbauen, oder alternativ direkt TRACE() verwenden - in beiden faellen enthalten die nicht-debug builds dann erst gar keinen aufruf dieser funktion mehr.

console debugger ist nicht so toll - dazu kannst du zum einen _nicht_ den vc++ debugger verwenden, zum anderen gehts nur ueber einen seriellen port. diese sache ist eher fuer entwickler von geraetetreibern gedacht.

was hingegen ganz gut ist ist das debuggen mit zwei rechnern. dazu muessen bei per tcp verbunden sein, die zu debuggende anwendung laueft dann auf dem einen, vc++ auf dem anderen pc. alle infos dazu findest du, wenn du in der online-hilfe nach 'remote debugging vc++' suchst.

wenn es dir aber ausreicht ein protokoll in eine textdatei zu schreiben ist es villeicht einfach das TRACE() makro zu verwenden und dann afxtrace.cpp so zu veraendern das es nicht mit OutputDebugString() operiert sondern in ein file schreibt.

WM_HOPETHISHELPS
thomas woelfer




this posting contains no tpyos.
bei Antwort benachrichtigen
Star thomas woelfer „hi. OutputDebugString tut nichts, wenn die anwendung nicht vom debugger...“
Optionen

Hi Thomas!

Ich habe mir mittlerweile selber eine Funktion zum ausgeben von Strings gebaut, die klappt ganz gut, aber das mit dem "Remote Debug" hört sich besser an.
Vor allem, weil ich hier eh 2 Rechner in einem TCP-Netzwerk stehen habe!

Ich probier das mal aus und poste das Ergebnis!

Ersteinmal Danke und guten Rutsch!

bei Antwort benachrichtigen
(Anonym) Star „Hi Thomas! Ich habe mir mittlerweile selber eine Funktion zum ausgeben von...“
Optionen

Nun also wie versprochen das Posting zum Ergebnis:

Ich habe in der VC++-Hilfe von MS nachgeschaut und war total überrascht, wie gut das ganze beschrieben war.
In nur 5 Minuten lief der Remote Debugger.

Man muss einfach nur 4 DLL-Dateien und die Remote-Debugger-EXE auf das System kopieren, wo das zu debuggende Programm laufen soll.
Dann nur noch die Netzwerkeinstellungen vornehmen (im Remote-Debugger und in VC++ im Menü "Erstellen" unter "Remote-Verbindung des Debuggers...".
Dann nur noch im Menü "Projekt" unter "Debug" das Verzeichnis angeben, in dem die Anwendung steht und schon kann es losgehen.

zu beachten ist nur, dass das Programm in einer Freigabe laufen muß, sonst kommt der eigentliche Debugger nicht ran.

Na denn mal viel Spaß beim BUG-suchen!

P.S.: Sucht in der MS-Hilfe am besten im indax nach "Debuggen" und wählt den Untereintrag "Remote-" aus . . . da steht dann alles nochmal präzise!


bei Antwort benachrichtigen