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
Thema durchsuchen
Ansicht
Themen-Optionen

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
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 11: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
20 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 12: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
669 Beiträge
 
Delphi 12 Athens
 
#3

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 12: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
KarllerntDelphi

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

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 14: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 13: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#6

AW: Anweisung um in den Debug-Mode zu kommen

  Alt 18. Jan 2021, 14:49
Das, was du willst, ist womöglich eher ein "bedingter Haltepunkt".

z.B. via F9 einen Haltepunkt setzen und in dessen Eigenschaften die Bedingung i <> 0 eintragen.
Auch lassen sich über Haltepunkt-Gruppen mit einem Haltepunkt andere ein/mehrere Haltepunkte (de)aktivieren.


Da asm-Code nur für Win32 unterstützt wird, funktioiert auch dieses nop nur für Win32.
Assembler geht, nur der Inline-Assembler wird nicht mehr unterstützt,

also eine ganze Funktion als Assembler darf man weiderhin schreiben, nur eben nicht mehr mitten drin, in einem Pascal-Code.


asm int 3 end; löst intern ein EXCEPTION_BREAKPOINT (0x80000003) aus, worauf der Debugger reagiert.
Hängt kein Debugger dran, dann raucht das mit einer Exception ab.

MSDN-Library durchsuchenDebugBreak ruft intern erbenfalls int 3 auf, aber nur wenn MSDN-Library durchsuchenIsDebuggerPresent ein Ja sagt.
Es raucht also ohne Debugger nicht ab,
aber wenn der Debugger reagiert, dann hält Er in dieser WinAPI an, und nicht dort, im eigenen Code.

https://en.wikipedia.org/wiki/INT_(x...truction)#INT3
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz