2010-12-09 6 views
3

Ich bin eine lange Zeit Delphi Dev und in der Vergangenheit verwende ich ein Drittanbieter-Tool zum Protokollieren und Debuggen während der Entwicklung (genannt Smart Inspect) aber jetzt, dass ich auf Delphi XE aktualisiert habe möchte ich versuchen und verwende die IDE zum Debuggen.Debugging-Code in Delphi XE

Meine Frage ist, da eine Funktion wie

procedure MyFunction; 
var 
    str : string; 
begin 
    str := 'Foo'; 
    //Debug, show value of str? 
    str := AnotherFunction(str); 
    //Debug, show value of str? 
end; 

, wie kann ich den Wert von str debuggen und erhalten, ohne dumme Dinge zu tun, wie Showmessage (str);

Wenn es irgendwo ein Video gibt (oder Artikel), dann bin ich mehr als glücklich zu lesen.

Gibt es eine Möglichkeit, den Wert von Variablen zu beobachten/ausgeben.

+0

Linie 5, Linie 7: zugewiesen und nie verwendet, eliminiert durch Optimierer –

Antwort

7

Nun, Delphi XE kommt mit CodeSite-Protokollierung, aber ich habe das Gefühl, Sie sprechen über den Debugger selbst.

Wenn Sie einen Haltepunkt in einer Routine platzieren, wird der Debugger unterbrochen, wenn er darauf trifft. Von dort haben Sie einen lokalen Variablenbereich und einen Überwachungsbereich auf der linken Seite der IDE. Lokale Variablen zeigen den Wert aller lokalen Variablen an, und mit Watches können Sie Ausdrücke einrichten, deren Wert überwacht wird.

Sie können mit Inspect (Alt-F5) auch etwas Ähnliches wie eine Uhr, aber mit detaillierteren Informationen (insbesondere für strukturierte Typen wie Objekte) erhalten. Mit dem Befehl "Auswerten/Ändern" (Ctrl-F7) können Sie Ausdrücke eingeben und diese auswerten. Es ist nicht so detailliert wie Inspect, aber es gibt Ihnen viel mehr Flexibilität.

Wenn Sie sich mit diesen Tools vertraut machen, werden Sie das Debuggen viel einfacher finden.

5

1) Sie können Output Funktion zur Ausgabe Zeichenfolge zu Debug-Fenster

2) können Sie Codesite Express verwenden. Ich empfehle Video von CodeRage 5 als Ausgangspunkt für die Verwendung von CodeSite

+0

+1 für Output – RRUZ

8

Wenn Sie die IDE-Debugger nur verwenden möchten, dann gehen Sie wie folgt vor:

  • einen Haltepunkt
  • Rechtsklick auf den breakpointr Kreis und wählen irgendwo setzen „Breakpoint Properties ...“
  • Presse Schaltfläche „Erweitert“ um weitere Optionen anzuzeigen
  • deaktivieren „Break“ Checkbox
  • dann verwenden „Log-Nachricht“ und „Eval Ausdruck“ Editboxen Spur eingeben Werte

Solche Nachrichten werden an das Debugger-Fenster "Event Log" gesendet. Klicken Sie mit der rechten Maustaste auf den Bereich und wählen Sie "Eigenschaften". Dort können Sie die Trace-Nachrichten ("Nachrichten")/hilight ("Farben") filtern, wie Sie möchten.

+1

12 Jahre Delphi und ich das nicht wusste! Weiß jemand, wann es hinzugefügt wurde? –

+1

@Gerry: Delphi 7 mindestens. Vielleicht 5 oder 6; Lass sie nicht mehr installieren, um sie zu überprüfen. –

+0

@Gerry & Ken: Ich sitze vor Delphi 5 und es ist schon da. Wusste das auch nicht - danke! –

0

Ich bevorzuge Debugger Hinweise. Nach dem Aufbrechen des Debuggers bewegen Sie Ihre Maus an die "str" ​​irgendwo in Ihrem Code und Sie sehen ihren aktuellen Wert. Sie können auch einige Aussagen mit einer Maus markieren und auswerten. Markieren Sie zum Beispiel "AnotherFunction (str)" und platzieren Sie Ihre Maus darüber.

1

Andere Antworten sind alle korrekt.

Meine persönliche Lieblingstechnik (wie die Antwort von da-soft) besteht darin, einen Haltepunkt zu erstellen, der eine Nachricht im Ereignisprotokoll protokolliert, die einen Wert enthält, den ich protokollieren möchte und der nicht "bricht" ist, wird die Ausführung fortgesetzt, ohne dass Sie das Ausführen-Symbol drücken). Jedes Mal, wenn diese Codezeile erreicht wird, erhalte ich meine Nachricht und meine Werte im Protokoll. Da ich zurückgehen und die Historie lesen sowie die aktuellen Werte sehen kann, finde ich das nützlicher als nur das Debugger-Watch-Fenster zu verwenden.

Aber da Delphi XE CodeSite enthält, können Sie weit über das hinausgehen, was Ausdruckauswertung in Haltepunkten für Sie tut. Code Site erfordert jedoch, dass Sie Ihren Code ändern, um einige Protokollierung hinzuzufügen. Aber es ist viel besser als eine Nachrichtenbox.

Sie können auch OutputDebugString (PChar (s)) verwenden, um eine beliebige Zeichenfolge an den Debugger auszugeben. Da dies alles enthalten kann, was Sie wollen, ist es eine sehr gute Möglichkeit zu debuggen, aber dem Endbenutzer keine Dinge zu zeigen.

In vielen meiner Anwendungen habe ich einen speziellen Trace-Puffer, der zirkulär ist (dh er behält nur die letzten 500 oder so Zeilen). Wann immer ich ein Problem sehe, erhalte ich nicht nur eine Stack-Traceback, sondern speichere auch dieses In-Memory-Trace-Protokoll, so dass ich einen Überblick darüber habe, was gerade vor meinem Problem vor sich ging. Sie können auch das Projekt Log 4 Delphi aufrufen.

0

Nichts ist falsch mit einer der anderen Antworten, aber ich wollte nur diese nützlichen Funktionen hinzufügen.

procedure DebugString (const s : string) ; overload ; 
begin 
    {$IFDEF DEBUG} 
    OutputDebugString (PChar (s)) ; 
    {$ENDIF} 
end ; 

procedure DebugString (const s : string ; args : array of const) ; overload ; 
begin 
    {$IFDEF DEBUG} 
    OutputDebugString (PChar (Format (s , args))) ; 
    {$ENDIF} 
end ; 
+0

Es ist besser, diese beiden Funktionen inline zu machen. Wenn also das Projekt mit Release config kompiliert wird, wird es die CPU nicht stören, eine Dummy-Prozedur aufzurufen. – Javid