Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Bedingte Schleifenunterbrechung im Debugger (https://www.delphipraxis.net/202399-bedingte-schleifenunterbrechung-im-debugger.html)

Codehunter 30. Okt 2019 10:54

Bedingte Schleifenunterbrechung im Debugger
 
Hallo!

Gibt es im Delphi-Debugger eine Möglichkeit, eine Variable automatisch auf einen bestimmten Wert zu überwachen und dann an einem Breakpoint zu halten? Hintergrund ist: Ich habe eine Schleife mit vielen Durchläufen, wo ein Fehler erst beim Eintreten eines bestimmten Zustands auftritt. Der Zustand ist nicht an den Schleifenzähler geknüpft sondern mehr oder weniger zufällig. Wenn ich nun innerhalb der Schleife einen Breakpoint setze, muss ich evtl. 10000x F9 drücken und die Variable manuell prüfen bis die Bedingung erfüllt ist.

Bisher habe ich das immer mit einem zusätzlichen
Delphi-Quellcode:
if Variable = Kriterium then MacheNichts()
-Block gemacht und dann darin den Breakpoint gesetzt. In normalen EXEn mag das noch praktikabel sein, bei Dienst-DLLs wirds aber schon nervig. Das Kriterium ist relativ komplex, sodass ich viele verschiedene Variablen im Debugger ändern müsste um das zu reproduzieren. Wäre sehr umständlich.

Besser bzw. eleganter fände ich es, wenn ich einen "bedingten Breakpoint" setzen könnte, bei dem nur gehalten wird wenn Variable = Kriterium ist und der Debugger für mich die Variable prüft.

Gibts so etwas?

Grüße
Cody

DasWolf 30. Okt 2019 11:04

AW: Bedingte Schleifenunterbrechung im Debugger
 
Break-Point setzen, rechte Maustaste auf den Punkt und "Eigenschaften des Haltepunkts..."

Klaus01 30. Okt 2019 11:07

AW: Bedingte Schleifenunterbrechung im Debugger
 
.. ist nicht das was Du suchst unter Breakpoint Properties zu finden
und dann Condition?

Grüße
Klaus

sakura 30. Okt 2019 11:17

AW: Bedingte Schleifenunterbrechung im Debugger
 
Wie die anderen schon geschrieben haben, Break-Point Eigenschaften im Gutter links neben dem Editor.

ABER: Der Debugger wird dann ggf. sehr, sehr, sehr langsam. Wenn es um richtig viele Iterationen geht, dann habe ich manchmal einen weiteren "Trick" genutzt (unter Win32).

Delphi-Quellcode:
....

if x = 100000 then
  asm int 3 end;

....
Dann stoppt der Debugger automatisch. Vor Release entfernen ;-)

...:cat:...

hoika 30. Okt 2019 11:23

AW: Bedingte Schleifenunterbrechung im Debugger
 
Hallo,
Zitat:

Das Kriterium ist relativ komplex
Ich benutze auch einen leeren if Block, weil der Debugger bei komplexen überwachten Ausdrücken immer langsamer wird.
Du könntest Dein if auch per $I als INC-Datei eintragen.

Codehunter 30. Okt 2019 12:05

AW: Bedingte Schleifenunterbrechung im Debugger
 
Zitat:

Zitat von DasWolf (Beitrag 1450505)
Break-Point setzen, rechte Maustaste auf den Punkt und "Eigenschaften des Haltepunkts..."

Geile Sache. Das ist mal wieder so ein Fall von Kopf klatscht auf Tischplatte :shock: 25 Jahre Delphi und dieses Fenster hab ich noch nie gesehen... (kein Witz!)

In solchen Momenten frag ich mich immer, was die IDE noch so alles kann was man nur nicht weiß weil irgendwo tief drin versteckt.

Uwe Raabe 30. Okt 2019 12:17

AW: Bedingte Schleifenunterbrechung im Debugger
 
Zitat:

Zitat von Codehunter (Beitrag 1450516)
In solchen Momenten frag ich mich immer, was die IDE noch so alles kann was man nur nicht weiß weil irgendwo tief drin versteckt.

Dann klapp das besagte Fenster mal über den Button Weitere >> auf...

Rollo62 30. Okt 2019 12:23

AW: Bedingte Schleifenunterbrechung im Debugger
 
Zitat:

Bisher habe ich das immer mit einem zusätzlichen if Variable = Kriterium then MacheNichts() -Block gemacht
Was ist denn daran so verkehrt ?
Conditional breakpoints finde ich bei komplexen Situationen nicht immer hilfreich,
- die sind langsam (nur mal gefühlt),
- umständlicher zu setzen/definieren,
- die beeinflussen irgendwie den Code- und Timingablauf (wer weiss was der Debugger da genau macht), etc.

Codehunter 30. Okt 2019 12:38

AW: Bedingte Schleifenunterbrechung im Debugger
 
Sagen wir mal so: 25 Jahre kam ich ohne aus. Aber es gibt halt seltene Situationen wo man solche Werkzeuge eben doch brauchen kann.

BTW/OT: Ich hab grad mal in der Erinnerungskiste gekramt und festgestellt, dass es wirklich fast auf den Tag genau 25 Jahre sind. Mist verdammter, ich werd alt :x

dummzeuch 30. Okt 2019 12:43

AW: Bedingte Schleifenunterbrechung im Debugger
 
Zitat:

Zitat von Rollo62 (Beitrag 1450520)
Conditional breakpoints finde ich bei komplexen Situationen nicht immer hilfreich,
- die sind langsam (nur mal gefühlt),

Nicht nur gefühlt. Ich habe schon häufig einen Debug-Lauf abgebrochen, weil er durch bedingte Breakpoints so langsam wurde, dass es einfach unpraktikabel war weiterzumachen. Abbrechen,
Delphi-Quellcode:
if bedingung then
  asm nop end; // <- Breakpoint hier
einfügen, Breakpoint setzen, neu compilieren und starten, kurz warten. Das kann gerne mal eine halbe Stunde einsparen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Seite 1 von 2  1 2      

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