AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Anweisung um in den Debug-Mode zu kommen

Anweisung um in den Debug-Mode zu kommen

Ein Thema von KarllerntDelphi · begonnen am 18. Jan 2021 · letzter Beitrag vom 18. Jan 2021
Antwort Antwort
Seite 1 von 2  1 2   
KarllerntDelphi

Registriert seit: 21. Okt 2020
Ort: Grünstadt
16 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 11:08
Hallo,

gibt es einen Befehl,mit dem ich in den Debug-Modus schalten kann.

z.B.

if i <> 0 then DEBUGSTART.

Danke

Karl
Karl

Geändert von KarllerntDelphi (18. Jan 2021 um 13:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.602 Beiträge
 
Delphi 5 Professional
 
#2

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 11:53
Debugging findet in aller Regel unabhängig vom geschriebenen Code statt. Wenn du an einer bestimmten Stelle debuggen willst, so setze einen Breakpoint und/oder steppe mit Einzelschritt (F7) bzw. F8 durch. Man kann auch bedingte Breakpoints setzen, also solche, die erst greifen, wenn z.B. eine Variable einen bestimmten Wert hat.

Grüße
Dalai
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.742 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 11:59
Mir ist überhaupt nicht klar was du möchtest. Willst du mit deinem Code erreichen, dass der laufende Debugger deine Anwendung anhält, so als wärst du auf einen Haltepunkt gelaufen? Das geht (beispielsweise) mit DebugBreak() aus WinApi.Windows. Auf anderen Plattformen wüsste ich jetzt nicht wie das geht.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
572 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 12:04
Dennoch kann es unter bestimmten Umständen sinnvoll sein, codeseitig den Debugger aufzurufen. Bedingte Breakpoints können den Code ganz schän abbremsen, so dass es sehr lange dauern kann, bis eine Bedingung erfüllt ist und die Ausführung dann auch stoppt, obwohl es im normalen Betrieb sehr schnell geht.

In solchen Fällen kann es sinnvoll sein, den Debugger-Aufruf vorübergehend (!) direkt in den Code einzubauen. Ich kenne die Lösung allerdings nur für Win32. Da geht das so:

Delphi-Quellcode:
if i<>0 then
  asm
    int 3
  end;
Wie das bei anderen Plattformen funktioniert, weiß ich allerdings nicht. Aber vielleicht reicht dir Win32 ja für den Anfang.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
953 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 12:28
In solchen Fällen kann es sinnvoll sein, den Debugger-Aufruf vorübergehend (!) direkt in den Code einzubauen. Ich kenne die Lösung allerdings nur für Win32. Da geht das so:

Delphi-Quellcode:
if i<>0 then
  asm
    int 3
  end;
Oder man fügt nur ein NOP ein und setzt darauf einen ganz normalen Breakpoint:

Delphi-Quellcode:
if i<>0 then
  asm
    nop // <<== Breakpoint hier setzen
  end;
Dann ist es nicht anz so schlimm, wenn man vergisst, diesen Code wieder zu entfernen.

Wie das bei anderen Plattformen funktioniert, weiß ich allerdings nicht. Aber vielleicht reicht dir Win32 ja für den Anfang.
Da asm-Code nur für Win32 unterstützt wird, funktioiert auch dieses nop nur für Win32.
Thomas Mueller
  Mit Zitat antworten Zitat
KarllerntDelphi

Registriert seit: 21. Okt 2020
Ort: Grünstadt
16 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 13:45
Ich kenne das Ganze aus der SAp-Umgebung. Dort kann man in der Programmsprache die
Anweisung Break-Point. setzen und bei der Ausführung hält das Programm
an der entsprechenden Stelle an und verzweigt in den Debug-Modus. ich wollte nur
wissen, ob es etwas Vergleichbares in delphi gibt.
Die Möglichkeiten des Debugging sind mir ansonsten vertraut. Auch die Möglichkeiten
von Variablenwerte abhängige Haltepunkt zu deinieren.
Trotzdem danke für all die Antworten.
Ich wollte mir eine einfache Möglichkeit schaffen bei bestimmten Werten,
welche ich an einer beliebigen Stelle definiere, nicht jedesmal einen Haltepunkt setzen zu müssen,
sondern das mit einer allgemeinen Prozedur abzufackeln.

procedure haltehier(variable,haltewert : string);
begin
if haltewert = '' then exit;
if variable = haltewert.
break-point.
endif.
end;

Das hätte mir die Möglichkeit geschaffen,a unterschiedliche Stellen im Programm
haltehier(variable, 'Haltewert');
einzubauen. Das hätte ich dann für späteres debugging
einfach im Code gelassen und die Wette auf '' gesetzt.

Für jene, die das für eine blöde Idee halten, okay, ist es vielleicht, aber ich hatte schon blödere.....

Danke

Karl
Karl
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
572 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 13:52
Hallo Karl,

du hast ja von Thomas, mir und dem schönen Günther Vorschläge bekommen, wie du genau das machen kannst. Oder war daran noch etwas unklar? Ich frage nach, weil du so im Konjunktiv schreibst.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.796 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 14:08
Ich wollte mir eine einfache Möglichkeit schaffen bei bestimmten Werten,
welche ich an einer beliebigen Stelle definiere, nicht jedesmal einen Haltepunkt setzen zu müssen,
sondern das mit einer allgemeinen Prozedur abzufackeln.
Das hätte aber den Nachteil, dass der "Haltepunkt"-Code immer dabei ist und zumindest die Lesbarkeit des Codes verschlechtert.

Alternativ kannst du aber auch einen Haltepunkt setzen und dem eine Bedingung mitgeben. Dann hält der Debugger nur dann an dem Haltepunkt, wenn die Bedingung erfüllt ist. Vorteil ist, dass der eigentliche Code keine künstlichen Debug-Anweisungen enthält.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.073 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 14:08
Hi Karl

Du kannst auch an gewissen Stellen die Werte verschiedener Variablen in zB. eine Liste speichern:

Delphi-Quellcode:
procedure TFormxxx.FormCreate(Sender: TObject);
begin
  FReportList := TStringlist.Create();
end;
Erzeugen der Liste. Die muss dann bei FormDestroy wieder zerstört werden.

Delphi-Quellcode:
procedure TOpenFileFrame.FileSearcher1MatchFound(Sender: TObject;
  const Path: string; const FileInfo: TSearchRec);
  var Complettpath, J: String;
begin
  if Assigned(FCurrentNode) then
  begin
    Complettpath := IncludeTrailingPathDelimiter(Path) + FileInfo.Name; // Complettpath := DeleteDrivesName(Complettpath);
    AddNewNode(FCurrentNode, FileInfo.Name, Complettpath,TSearchRecAnalyzer.IsDirectory(FileInfo));
    FReportList.Add(' TOpenDlg.FileSearcher1MatchFound');
    FReportList.Add(' -- Complettpath := : '+ Complettpath);
    FReportList.Add(' -- J := ' + J);
    FReportList.Add(' -- FFileType := ' + FFileType);
    FReportList.Add(' -- FPathlist.Count := : '+ IntToStr(FPathlist.Count));
  end;
end;
Füllen der Liste während des Programmlaufs

Erzeugt einn Filestream und speichert die Liste darin. TFileStream.Create schlägt fehl, wenn die Datei schon existiert. So kann ich jeden Testlauf in einer eigenen Liste/Datei festhalten:

Delphi-Quellcode:
procedure TMainForm.WriteReportFile;
  var S, DateTimeStr, DS: string;
      ReportStream: TFileStream;
begin
 DS := DateTimeToStr(Now);
 DateTimeStr := StringReplace(DS, ':', '-', [rfReplaceAll]);
  S := ExtractFilePath(Application.ExeName) + '\' + 'CodeReport ' +DateTimeStr+'.txt';
  Reportstream := TFileStream.Create(S, fmCreate);
  try
    FReportList.insert(0,DateTimeToStr(Now));
    FReportlist.Insert(1,'----------------');
    FReportlist.SaveToStream(ReportStream);
  finally
    Reportstream.Free;
  end;
end;

Mit ReplaceStr werden alle Doppelpunkte aus Now entfernt und durch Bindestriche ersetzt. Doppelpunkte sind in Dateinamen zumindest bei Delphi/Windows nicht erlaubt.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
KarllerntDelphi

Registriert seit: 21. Okt 2020
Ort: Grünstadt
16 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 15:05
Hallo Karl,

du hast ja von Thomas, mir und dem schönen Günther Vorschläge bekommen, wie du genau das machen kannst. Oder war daran noch etwas unklar? Ich frage nach, weil du so im Konjunktiv schreibst.
Nein, danke, alles klar.
Vielen Dank für die Antworten und Vorschläge.

Karl
Karl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf