Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Diskussion: Debugging in Delphi für Anfänger und Fortgeschr. (https://www.delphipraxis.net/41048-diskussion-debugging-delphi-fuer-anfaenger-und-fortgeschr.html)

MaBuSE 25. Feb 2005 07:37


Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Hallo,

ich habe ein kleines Tutorial zum Debuggen erstellt.
Tutorial: Debugging in Delphi für Anfänger und Fortgeschr.

Bitte dort keine Diskussionen, dazu ist dieses Thema da ;-)

Danke

jim_raynor 25. Feb 2005 08:31

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Also Respekt. Bisher das Umfangreichste und ausführlichste, was ich zum Thema Debuggen gesehen habe. Auch als "alter Delphi-Veteran" hab ich trotzdem noch neue Sachen gelernt. Also nach mal ein Dank an alle beteiligten und wir hoffen einfach, das dieses Tutorial die gewünschte Zielgruppe erreicht.

Schuster 25. Feb 2005 09:00

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Respekt eine gute Anleitung. :thumb:

Was mir noch abgeht ist wie man eine dll debugen kann.

MaBuSE 25. Feb 2005 09:09

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von jim_raynor
Also Respekt.

Danke
Zitat:

Zitat von jim_raynor
Bisher das Umfangreichste und ausführlichste, was ich zum Thema Debuggen gesehen habe. Auch als "alter Delphi-Veteran" hab ich trotzdem noch neue Sachen gelernt. Also nach mal ein Dank an alle beteiligten und wir hoffen einfach, das dieses Tutorial die gewünschte Zielgruppe erreicht.

Das hoffe ich auch.
Ich habe zwar noch viele Ideen, was man noch so alles in das Tutorial einbauen könnte, aber das kann man ja nachreichen.

Einige Punkte sind z.B.
  • remote debugging
  • Debuginfos in Exe um Projekt mit "anderem" Debugger zu debuggen
  • map Dateien bzw. alles was der Linker an Infos bietet
  • Debugging Komponenten
    • JCL (Exception Handling mit Aufrufstack zur Laufzeit inkl. Unitname und Zeilennummer)
      • Delphi-Quellcode:
        ...
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          StrToInt('Eins'); // Zeile 28 in Unit1
        end;
        ...
        zur Laufzeit erzeugter Stack
        Exception class: EConvertError
        Exception address: 00407CE7
        ----------------------------------------------------------------------------------------------------
        Stack list, generated 25.02.2005 10:04:27
        [00407CE2] SysUtils.ConvertErrorFmt (Line 3196, "sysutils.pas" + 1) + $17
        [00408549] SysUtils.StrToInt (Line 4611, "sysutils.pas" + 2) + $1A
        [004563B1] Unit1.TForm1.Button1Click (Line 28, "Unit1.pas" + 0) + $5
        [00436C18] Controls.TControl.Click (Line 4705, "Controls.pas" + 9) + $8
        [0042F1EC] StdCtrls.TButton.Click (Line 3472, "StdCtrls.pas" + 3) + $2
        [0042F2E0] StdCtrls.TButton.CNCommand (Line 3524, "StdCtrls.pas" + 1) + $B
        [00436A80] Controls.TControl.WndProc (Line 4645, "Controls.pas" + 53) + $6
        [0043998B] Controls.TWinControl.WndProc (Line 6342, "Controls.pas" + 33) + $4
        [0042F0B0] StdCtrls.TButtonControl.WndProc (Line 3414, "StdCtrls.pas" + 13) + $4
        [00436850] Controls.TControl.Perform (Line 4552, "Controls.pas" + 5) + $C
        [00439AC3] Controls.DoControlMsg (Line 6388, "Controls.pas" + 6) + $11
        [0043A11B] Controls.TWinControl.WMCommand (Line 6574, "Controls.pas" + 1) + $5
        [004507F4] Forms.TCustomForm.WMCommand (Line 4115, "Forms.pas" + 3) + $4
        ...
    • GExperts
    • ...
  • ...
Du siehst, es gibt noch viel mehr zum Thema Debugging zu schreiben.

Aber dieses Tutorial sollte für den Anfang erst mal reichen ;-)

Daniel 15. Mär 2005 14:28

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Dieses Tutorial hat schon jetzt seinen festen Platz auf unserer CD für Kassel verdient. :thumb: Und das selbst ohne diese überaus interessanten Themen, die Du für die Ergänzung Deines Tutorials ansprichst.

MaBuSE 15. Mär 2005 15:53

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von Daniel
Dieses Tutorial hat schon jetzt seinen festen Platz auf unserer CD für Kassel verdient. :thumb:

Danke. :)

Zitat:

Zitat von Daniel
Und das selbst ohne diese überaus interessanten Themen, die Du für die Ergänzung Deines Tutorials ansprichst.

Gibt es bestimmte Themen die Euch besonders interessieren?

Ich werde voraussichtlich im April wieder etwas Zeit haben, das Tutorial zu ergänzen.

DLL Debugging wurde von Schuster angesprochen.

maximov 15. Mär 2005 16:49

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von MaBuSE
...Gibt es bestimmte Themen die Euch besonders interessieren?

Ja. Im weitesten sinne gehört logging auch zum debugging. Ist aber vermutlich eher ein eigenes thema. Besonders loggen mit log4D und log4net könnte für viele interessant sein. Ein sauberes hierarchischen logging wird oft unterschätzt und kann beim debugging sehr hilfreich sein.

schöni 15. Mär 2005 16:55

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hallo Ihr!

Zu diesem Thema frage ich, wie ich meine Delphi IDE dazu bringe, auf Quelltextebene zu debuggen, wenn eine Exception aufgetreten ist. Mein D7 zeigt in diesem Fall nicht mal die fehlerhafte Zeile an. Manchmal ist es auch praktisch, den Programmlauf bis zum Eintritt der Exception zu verfolgen. Welche Eistellungen muss ich da in der IDE in welchen Menüs/Registerkarten vornehmen? Auf jeden Fall Danke für das Tutorial!

schöni

MaBuSE 15. Mär 2005 16:57

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von maximov
Zitat:

Zitat von MaBuSE
...Gibt es bestimmte Themen die Euch besonders interessieren?

Ja. Im weitesten sinne gehört logging auch zum debugging. Ist aber vermutlich eher ein eigenes thema. Besonders loggen mit log4D und log4net könnte für viele interessant sein. Ein sauberes hierarchischen logging wird oft unterschätzt und kann beim debugging sehr hilfreich sein.

Da gebe ich Dir recht.
Ich glaube aber das log4d nicht in dieses Tutorial gehört.
(Das ist so komplex, da kann man ein eigenes Tutorial draus machen).

Im Debug Tutorial steht
Das Ereignisprotokoll zeigt Prozessbotschaften, Haltepunktbotschaften, OutputDebugString-Botschaften und Fensterbotschaften an.

Ereignisprotokoll, Haltepunktbotschaften und OutputDebugString werden im Tutorial schon beschrieben.

Ich könnte höchstens noch etwas allgemeiner auf Loging eingehen und dabei erwähnen, dass es z.B. log4d gibt.

MaBuSE 15. Mär 2005 17:02

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von schöni
Zu diesem Thema frage ich, wie ich meine Delphi IDE dazu bringe, auf Quelltextebene zu debuggen, wenn eine Exception aufgetreten ist. Mein D7 zeigt in diesem Fall nicht mal die fehlerhafte Zeile an. Manchmal ist es auch praktisch, den Programmlauf bis zum Eintritt der Exception zu verfolgen. Welche Eistellungen muss ich da in der IDE in welchen Menüs/Registerkarten vornehmen? Auf jeden Fall Danke für das Tutorial!

Das sollte Delphi eigentlich defaultmässig tun.

Schau mal im Tutorial bei
  • 5.2 -> Aufruf-Stack [Strg + Alt + S]
  • 7.1 -> Debugger Optionen

runger 15. Mär 2005 17:20

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hallo,

klasse Tutorial. Könntest du das Ganze auch in elektronischer Form zugänglich machen?
Als PDF oder doc oder...
Wäre extren nett.

Danke
Rainer

MaBuSE 15. Mär 2005 17:24

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von runger
klasse Tutorial. Könntest du das Ganze auch in elektronischer Form zugänglich machen?
Als PDF oder doc oder...
Wäre extren nett.

Klick einfach auf den http://www.delphipraxis.net/template...pdf_export.gif

Diesen Button findest Du auf jeder Seite rechts oben.

Wenn Du am 02.04.2005 auf die Delphi Tage in Kassel kommst, wist du das Tutorial auf auf der CD haben :mrgreen:

neogen 15. Mär 2005 17:40

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hoi, vielleicht sollte man noch erwähnung, dass Overseer ein nettes freies Tool ist, was praktisch beim Debuggen ist.

Jeder sollte es haben ;)

Download:
http://sourceforge.net/project/showf...ackage_id=4280

Overseer ist ein Programm was aehnlich wie Raize CodeSite ist. Wer genauere Infos haben moechte sollte mal bei http://www.raize.com schauen. Overseer ist schon recht alt, aber es funktioniert immer noch prima bei mir.

Raize Codesite Informationen:
http://www.raize.com/DevTools/CodeSite/Default.asp

Viel Spass beim debuggen wuenscht der neogen :???:

MaBuSE 15. Mär 2005 17:46

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Ich werde eine kleine Linkliste zu Tools rund ums Debuggen an das Tutorial anhängen.

schöni 15. Mär 2005 20:45

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hallo MaBuSE!

Danke erst mal für den Handbuch-Tipp. Hab das grad durchgelesen und in Delphi

- Debug Info AN
- Lokale Symbole AN
- Referenzinfo AN
- Nur Definitionen AUS
- Assertions AN

eingestellt. Debuginfo war bei mir AUS. Die ersten 3 Einstellungen sind zwingend, damit der Debugger überhaupt ins Programm geht. Anders ist es, wenn ich Assert verwende. Dann reicht Debuginfo AN völlig aus und der Debugger hält auf Assert. Nun meine Frage, die ich mit dem Handbuchstudium nicht klären konnte:

In meinem unten stehenden Quelltext hält der Debugger ohne Verwendung von Assert in der .dpr Datei auf der Run-Zeile. Die Exception tritt jedoch bereits in CreateForm(...) auf. Wie bewege ich den Debugger dazu, in meinem Fall (siehe unten) auf ShowPanel stehen zu bleiben. Wie gesagt, wenn ich vor ShowPanel die Assert-Anweisung habe, hält der Debugger dort, ohne Assert erst auf Run. Danach kann ich mein Programm über Strg+F2 beenden und dann Einzelschritt machen. Aber ich hätte eben gerne bei normalem Programmstart, das der Debugger auf der fehlerhaten Zeile und nicht erst danach hält. Von der Möglichkeit, Haltepunkte explizit zu setzen mal abgesehen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Panel: TPanel;
    procedure ShowPanel;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.ShowPanel;
begin
   //Wenn ich Assert verwende hält der Debugger auf der Assert-Zeile
   Panel.Show; //die Zeile mit der Exception (Panel nicht erzeugt)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   ShowPanel;
end;

end.
Hast Du MaBuSE, oder ein anderer von Euch nen heißen Tipp. Danke

schöni

gordon freeman 15. Mär 2005 20:57

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Vielen Dank für das dolle Tutorial, besonders als Schüler kann man doch noch einiges zum Debuggen lernen.

Super gemacht :thumb:

runger 16. Mär 2005 05:44

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hallo,

was mir noch fehlt ist ein Referenz der Tastenkombinationen (Schnellübersicht).

Rainer

neogen 16. Mär 2005 14:04

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Noch mal ein Tip hier:

http://www.eurekalog.com/

Das Tool hilft auch ziemlich beim Debuggen, doch es ist leider Shareware.

Gruss, neogen 8)

MaBuSE 16. Mär 2005 15:14

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von schöni
Aber ich hätte eben gerne bei normalem Programmstart, das der Debugger auf der fehlerhaten Zeile und nicht erst danach hält. Von der Möglichkeit, Haltepunkte explizit zu setzen mal abgesehen.

Das Problem kenne ich.
Der Fehler tritt auf, der Debugger springt in die nächste Zeile.
Da bei einem Fehler die Proc abgebrochen wird, ist die nächste Zeile in der aufrufenden Proc.
In Deinem Fall Application.Run

Lösung: (ich glaube das geht aber in der Personal nicht)
Aktiviere "Mit Debug DCU" in den Projektoptionen / Compiler
Dann springt der Debugger in die Controls.pas

Im Dialogfenster Aufruf Stack kann man dann sehen, welche "eigene" Funktion das aufgerufen hat.

Screenshot im Anhang.

MaBuSE 28. Jun 2005 12:20

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
In der aktuellen Toolbox gibt es auch einen mehrseitigen Artikel über das Debuggen in Delphi.

Der Artikel heißt: "Debuggen mit Delphi"

Inhaltsverzeichnis des aktuellen Heftes: http://www.toolbox-mag.de/data/tx32005inh.pdf

Siehe auch: http://www.toolbox-mag.de/toolbox.html

oder das Tutorial: Debugging in Delphi für Anfänger und Fortgeschr. :mrgreen:

jfheins 18. Jan 2006 17:31

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Mit Prozess verbinden
(Menü -> Start -> Mit Prozess verbinden...)
Zeigt eine Liste der gegenwärtig laufenden Prozesse an, die Du mit dem Debugger untersuchen kannst.
Es ist also durchaus möglich z.B. notepad.exe (von Microsoft) mit Delphi in der CPU Ansicht zu debuggen.
Irre ich mich, oder gibt es diesen Menüpunkt in D2005 Personal nicht ? :gruebel:

Ansonsten gutes Tutorial ;) :thumb:

MaBuSE 19. Jan 2006 07:42

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von jfheins
Irre ich mich, oder gibt es diesen Menüpunkt in D2005 Personal nicht ? :gruebel:
Ansonsten gutes Tutorial ;) :thumb:

Danke für das Lob, aber ob die Funktion in D2005 Personal vorhanden ist, kann ich Dir nicht sagen. (Ich verwende keine Personal ;-))

RavenIV 23. Mai 2008 10:03

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Dieser Thread ist zwar schon etwas älter, ich will ihn aber trotzdem "aufwärmen".

Wird denn das Tutorial, das im ersten Beitrag erwähnt wurde noch weiterentwickelt?
Oder kann man sonst irgendwo ein Tutorial zu RemoteDebugging bekommen?

divBy0 17. Jul 2008 12:33

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Das würde mich auch interessieren...

RavenIV 17. Jul 2008 12:43

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Hab grad an MaBuSE eine pn geschrieben.
Mal schauen, was er dazu meint.

divBy0 17. Jul 2008 13:05

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Bin mal gespannt...
Das Remote-Debugging könnte ich nämlich gerade mal sehr gut gebrauchen. :-D

MaBuSE 17. Jul 2008 14:42

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Zitat:

Zitat von RavenIV
Hab grad an MaBuSE eine pn geschrieben.
Mal schauen, was er dazu meint.

Hallo,
ja ich werde das Tutorial irgendwann erweitern.
Leider habe ich im Moment gar keine Zeit. Ich bin im Moment auch nur wenig hier im Forum unterwegs. :-(
Wenn meine Projekte es zulassen werde ich mich wieder mit dem Tutorial beschäftigen.
(und auch mit anderen Dingen, die ich hier in die DP stellen will. ;-) )

Tut mir leid.

Liebe Grüße
MaBuSE

Meta777 17. Jul 2008 20:31

Re: Diskussion: Debugging in Delphi für Anfänger und Fortges
 
Ist recht einfach (vorausgesetzt man debug mit neuem comilat)...

den remotedugger auf dem Zielsystem installieren und starten dann die Comileroptionen wie im Tutorial von MaBuSe beschrieben einstellen (Stack frames, MAP File etc.). Das Ausgabeverzeichnis (unter Projekt -> Optionen) sollte dort hinzeigen wo die exe auch erstellt werden soll (logisch) - Also z.B. "\\Rechner1\c$\testapp\" und dann muss noch der Haken bei Fehlersuche auf externem System (unter Start -> Parameter... -> Extern) rein, in Externer Host muss die IP oder der Horstname des Rechner und Externer Pfad gibt an wo der remotedebugger die EXE findet - also aus Sicht des Zielrechners (C:\testapp\myProject.exe). Optional kann man auch Parameter vergeben.

Man kann aber auch eine bereits laufende Anwendung debuggen indem man Mit Prozeß verbinden unter Start bei Externen Rechner den Rechner angibt wo der remotedebugger läuft...

Shalom

@MaBuSe: Danke für das tolle Tutorial; das war sehr hilfreich :hello: :thumb:

ATS3788 9. Mai 2014 07:30

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Hallo
Wow 9 Jahre ist die Diskussion alt.
Ich habe eine frage zu
Delphi XE und Ctrl-Alt-M
damit soll man Module aufzulisten.
Das funktioniert leider nicht
Wie kann man das Fenster sonst noch öffnen?

Hintergrund ich möchte eine Dll debuggen

Sherlock 9. Mai 2014 09:08

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klassich mit der Maus: Menü Ansicht -> Debug Fenster -> Module. Vergleiche dazu den Anhang.

Sherlock

ATS3788 9. Mai 2014 10:14

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Danke für die schnelle Antwort

Das habe ich leider nicht, weil ich die Starter XE Version habe. :(

Sherlock 9. Mai 2014 12:12

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Ah, ja dann biste gekniffen. :(

Sherlock

mkinzler 9. Mai 2014 12:13

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
http://www.delphipraxis.net/159671-w...nicht-nur.html

AlexII 17. Aug 2014 18:23

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Ich sehe bei mir kein Unterschied zwischen den Tasten F8 und F9, die machen immer das gleiche. So bin schon so ziemlich am Anfang des Tutorials stehen geblieben. :|

Perlsau 17. Aug 2014 19:33

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Ich weiß leider nicht mehr, wie das bei früheren Delphi-Versionen war, aber bei D2009 bist startet F9 das Programm im Debug-Modus ganz normal, F8 dagegen springt zum ersten auführbaren Befehl in der DPR-Datei, also dem Projekt-Quellcode.

jaenicke 17. Aug 2014 22:59

AW: Diskussion: Debugging in Delphi für Anfänger und Fortgeschr.
 
Das war schon immer so. Diese Befehle gibt es seit Delphi 1:

F9 - Programm einfach im Debugger ausführen
Strg + F9 - kompilieren
F8 - Die nächste Prozedur ausführen ohne hineinzudebuggen (es sei denn es ist ein Haltepunkt irgendwo in diesem Aufruf)
F7 - In die nächste Prozedur hineindebuggen
F4 - Bis zum Cursor ausführen und in der Zeile anhalten
Strg + F2 - Programmausführung beenden

Mit Delphi 2 kam dann noch Shift + F7 dazu um zur nächsten Quelltextzeile zu debuggen.

Mit Delphi 5 kam Shift + F8 hinzu um bis zur Rückkehr aus der Prozedur zu debuggen.

Mit der neuen IDE von Delphi 2005 kamen:
Strg + Shift + F9 - Ausführen ohne Debugger
Shift + F9 - Projekt erzeugen


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz