Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Haltepunkt Eigenschaften (https://www.delphipraxis.net/205657-haltepunkt-eigenschaften.html)

kagi3624 2. Okt 2020 11:09

Haltepunkt Eigenschaften
 
Hallo! Kann man den Haltenpunkt so setzen, dass man genau dann hält, wenn die Variable in dieser Zeile einen ganz bestimmten Wert annimmt? Es ist eine Schleife und wenn ich auf den Haltepunkt mit rechts klicke und auf die Eigenschaften gehe, kann man da nur die Durchläufe einstellen.

Ich habe Delphi 6.

Vielen Dank!

dummzeuch 2. Okt 2020 12:12

AW: Haltepunkt Eigenschaften
 
Zitat:

Zitat von kagi3624 (Beitrag 1474759)
Hallo! Kann man den Haltenpunkt so setzen, dass man genau dann hält, wenn die Variable in dieser Zeile einen ganz bestimmten Wert annimmt? Es ist eine Schleife und wenn ich auf den Haltepunkt mit rechts klicke und auf die Eigenschaften gehe, kann man da nur die Durchläufe einstellen.

Ich habe Delphi 6.

Rechtsklick auf den Breakpoint -> Breakpoint Properties -> Advanced
Dort dann eine Eval expression eintragen:

Variable=Wert

Darf auch komplexer sein.

Das Problem dabei ist, das bei jedem Durchlauf diese Expression ausgewertet wird, was den Debugger extrem verlangsamt. Deshalb füge ich im Code lieber sowas ein:

Delphi-Quellcode:
if Variable=Wert then
  asm nop end;
und setze den Breakpoint auf die asm-Zeile.

himitsu 2. Okt 2020 15:38

AW: Haltepunkt Eigenschaften
 
Inline-Assembler gibt es nur noch im Win32-Compiler, außerdem geht es auch kürzer/einfacher.
Ich nehm da einfach immer ein
Delphi-Quellcode:
Sleep(0);
(früher
Delphi-Quellcode:
Beep;
), um dort meinen Haltepunkt draufzulegen, was meistens geht da dies nötige Unit oft vorhanden ist.

Delphi-Quellcode:
asm int 3; end;
oder MSDN-Library durchsuchenDebugBreak kann/konnte man auch verwenden ... das ist dann ein "programmierter" Haltepunkt,
aber Achtung, "int 3" im Programm, ohne dass ein Debugger aktiv ist, und es knallt.
Drum macht
Delphi-Quellcode:
DebugBreak;
intern ein
Delphi-Quellcode:
if IsDebuggerPresent then asm int 3 end;
.

Delphi.Narium 2. Okt 2020 15:46

AW: Haltepunkt Eigenschaften
 
Zitat:

Zitat von himitsu (Beitrag 1474798)
Inline-Assembler gibt es nur noch im Win32-Compiler,

was bei Delphi 6 ja gegeben sein dürfte.
Delphi-Quellcode:
if Variable = Wert then
  Variable := Variable;
Keine Gedanken darüber, ob passende Unit vorhanden / eingebunden ist oder nicht, kein Gedanke darüber ob int 3 zu 'nem Fehler führen könnte, kein Gedanke darüber, ob's der Compiler noch kann oder nicht ;-)

dummzeuch 2. Okt 2020 16:44

AW: Haltepunkt Eigenschaften
 
Zitat:

Zitat von himitsu (Beitrag 1474798)
Drum macht
Delphi-Quellcode:
DebugBreak;
intern ein
Delphi-Quellcode:
if IsDebuggerPresent then asm int 3 end;
.

Hm:
DebugBreak:
Zitat:

If the process is not being debugged, the function uses the search logic of a standard exception handler. In most cases, this causes the calling process to terminate because of an unhandled breakpoint exception.
Ist aber trotzdem ein guter Hinweis.

dummzeuch 2. Okt 2020 16:46

AW: Haltepunkt Eigenschaften
 
Zitat:

Zitat von himitsu (Beitrag 1474798)
Inline-Assembler gibt es nur noch im Win32-Compiler, außerdem geht es auch kürzer/einfacher.
Ich nehm da einfach immer ein
Delphi-Quellcode:
Sleep(0);
(früher
Delphi-Quellcode:
Beep;
), um dort meinen Haltepunkt draufzulegen, was meistens geht da dies nötige Unit oft vorhanden ist.

Der Vorteil der Assembler-Zeile ist, dass sie sofort als Debug-Code auffällt, im Gegensatz zu einem Beep oder Sleep, welches ja auch normaler Code sein könnte. Aber stimmt, Inline Assembler gibt es nur für Win32, auf der anderen Seite ging es ja explizit um Delphi 6.

himitsu 2. Okt 2020 17:07

AW: Haltepunkt Eigenschaften
 
Mir war so, dass dort sowas drin war.

Aber ich verwende diese Funktion auch nicht mehr, denn sie hat einen blöden Nachteil:
Der Debugger hält in dieser Funktion und nicht dort, wo sie aufgerufen wurde, was schon ä bissl nevig ist.

Zitat:

In most cases, this causes the calling process to terminate because of an unhandled breakpoint exception
Die VCL und (leider) auch TThread fangen unbehandelte Exceptions ab, drum würde da meistens nicht gleich alles verrecken. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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