Frage zu "Visual C++ 2005 Express Edition": dynamische Arrays im Debugger betrachten
-
In der Hilfe fand ich zu TRACE:
das hierUm Programmmeldungen im Ausgabefenster des Debuggers anzuzeigen, können Sie das ATLTRACE-Makro oder das MFC-TRACE-Makro verwenden. Wie Assertionen sind auch TRACE-Makros nur in der Debugversion des Programms aktiv und werden bei der Kompilierung der Releaseversion entfernt. Die folgenden Beispiele zeigen einige Verwendungsmöglichkeiten für das TRACE-Makro auf. Ähnlich wie printf ist das TRACE-Makro in der Lage, mehrere Argumente zu verarbeiten. int x = 1; int y = 16; float z = 32.0; TRACE( "This is a TRACE statement\n" ); TRACE( "The value of x is %d\n", x ); TRACE( "x = %d and y = %d\n", x, y ); TRACE( "x = %d and y = %x and z = %f\n", x, y, z ); Weitere Informationen zum TRACE-Makro finden Sie unter Diagnosedienste.
und zu TRACE1 das hier:
The TRACE macros are obsolete, use ATLTRACE2. See TRACE0 for a description of the TRACE1 macro. TRACE1( exp, param1 ) Parameters exp A format string as used in the run-time function printf. param1 The name of the variable whose value should be dumped. Example // Example for TRACE1 int i = 1; TRACE1( "Integer = %d\n", i ); // Output: 'Integer = 1' // Another example for TRACE1 DWORD dwLastError = ::GetLastError(); TRACE1("The last error code for this thread is %d\n", dwLastError);
und dann gibt es noch das Makro TRACE2 dazu aber keinen Ausschnitt.
-
busenbach schrieb:
ehrlich? ich dachte wenn man einmal mit "vector" eine VariableReihe festlegt dann bleibt diese auch bis Programmende so fest, ohne dass man den Speicher wieder freigeben kann. Irre ich mich da?
Ich weiß ja nicht, wo du sowas gelesen hast, aber ein std::vector<> ist ein dynamisch erweiterbares Array, das je nach Bedarf wachsen und auch wieder schrumpfen kann. (und für viele Anwendungen auch die schnellste Alternative - wenn nicht, gibt es noch deque<>, list<>, set<>, map<> etc).
PS: TRACE und seine Kollegen funktionieren wie printf() - mit dem Unterschied, daß sie in das Ausgabefenster des Debuggers schreiben anstatt auf die Konsole (TRACE() als VarArg-VAriante, TRACE0 bis TRACE3 spezialisiert für 0 bis 3 Werte).
-
CStoll schrieb:
busenbach schrieb:
ehrlich? ich dachte wenn man einmal mit "vector" eine VariableReihe festlegt dann bleibt diese auch bis Programmende so fest, ohne dass man den Speicher wieder freigeben kann. Irre ich mich da?
Ich weiß ja nicht, wo du sowas gelesen hast, aber ein std::vector<> ist ein dynamisch erweiterbares Array, das je nach Bedarf wachsen und auch wieder schrumpfen kann. (und für viele Anwendungen auch die schnellste Alternative - wenn nicht, gibt es noch deque<>, list<>, set<>, map<> etc).
PS: TRACE und seine Kollegen funktionieren wie printf() - mit dem Unterschied, daß sie in das Ausgabefenster des Debuggers schreiben anstatt auf die Konsole (TRACE() als VarArg-VAriante, TRACE0 bis TRACE3 spezialisiert für 0 bis 3 Werte).
ach so, wusste ich gar nicht! werde mal bei Gelegenheit reinschauen, denn im Moment komme ich mit new[] und delete[] recht gut zurecht
(-->bis auf, dass ich beim DEBUGGER nicht die ganzen Arraywerte gleichzeitig im Fenster anschauen kann, sondern stattdessen immer jede einzeln anwählen muss)
Naja, vielleicht finde ich noch einen Weg-->Muss ich bei TRACE was "#includen"? Der findet das nicht
-
Du dürftest TRACE nicht nutzen können, weil das zur MFC gehört. Die ist in der Express Edition nicht dabei.
Schaue dir einfach mal die Nutzung von std::vector an und dein Problem ist gelöst.
-
Hier gehts ja eher um C++ als um VC, ich schieb mal.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dü könntest im Debuggger einfach den Variablennamen eingewben, und dahinter ein komma schreiben, und wiederum dahinter die länge des arrays.
Also AddWatch -> Untem im Watch-Fenster komma und länge hizufügen, und fertig!
-
estartu schrieb:
Hier gehts ja eher um C++ als um VC, ich schieb mal.
Standard-C++ kennt weder Debugger noch TRACE-Makros. Das ist ein reines IDE-Problem.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Pellaeon schrieb:
Du dürftest TRACE nicht nutzen können, weil das zur MFC gehört. Die ist in der Express Edition nicht dabei.
Schaue dir einfach mal die Nutzung von std::vector an und dein Problem ist gelöst.
ist eigentlich nicht ganz die elegante Lösung kurzerhand mal die ganze Programmierung wegen so was umzustellen, aber habe jetzt ENDLICH herausgefunden wie es funktioniert. Für alle die es wissen wollen:
-->Wenn ein Array dynamisch erstellt wurde (z.B. int *var; var=new int [10] ) dann kann man sich das im Debugger ganz einfach direkt anzeigen lassen indem man es so eingibt
"var,n" (hier: n=10)Der Debugger zeigt dann direkt den Inhalt der nächsten 10 Speicheradressen genau so an wie wenn man es ganz normal erstellt hätte.
-
Gfdge schrieb:
Dü könntest im Debuggger einfach den Variablennamen eingewben, und dahinter ein komma schreiben, und wiederum dahinter die länge des arrays.
Also AddWatch -> Untem im Watch-Fenster komma und länge hizufügen, und fertig!ach, es gab ja noch eine 2te Seite! hatte ich ganz übersehen.
Ganz genau das hatte ich gemeint.
Trotzdem Danke!