Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Verwendung des Debuggers in Delphi6? (https://www.delphipraxis.net/167296-verwendung-des-debuggers-delphi6.html)

HJay 22. Mär 2012 13:02

Verwendung des Debuggers in Delphi6?
 
Ich habe noch wenig Erfahrung mit dem Debugger. Mein Programm gibt jetzt eine Meldung "invalid floating point operation" aus. Ich habe Debug-Optionen angeschaltet und beim Fehler springt der Debugger auf ein Code-Fragment aus der Unit "System":

Code:
procedure      _ROUND;
asm
        { ->   FST(0) Extended argument      }
        { <-    EDX:EAX Result                 }

        SUB    ESP,8
        FISTP  qword ptr [ESP]
        FWAIT
        POP    EAX
        POP    EDX
end;
Ich kann mit F7 und F8 dann etliche weitere kryptische Zeilen durchgehen, gelange aber nie zu dem Befehl aus meinem eigenen Code, der den Fehler ursprünglich verursacht hat.

Ich vermute den Fehler in einer länglichen Grafikroutine, die für sehr viele andere Fälle problemlos durchläuft und bei einer scheinbar ganz speziellen Konstellation diesen Floatingpoint-Fehler provoziert.

Wie kann ich Delphi dazu bringen, mir den Befehl meines Codes anzuzeigen, der den Fehler dann in Folge auslöst?

mkinzler 22. Mär 2012 13:11

AW: Verwendung des Debuggers in Delphi6?
 
Setze Breakpoints bei Aufruf von Round() in deinem Code

Bernhard Geyer 22. Mär 2012 13:11

AW: Verwendung des Debuggers in Delphi6?
 
Setzt du auf externe Komponenen auf die DirectX oder OpenGL verwenden?

HJay 22. Mär 2012 13:29

AW: Verwendung des Debuggers in Delphi6?
 
Breakpoints: Das klappt nicht gut, weil die Routine Tausende Male aufgerufen wird, bis es zu dem Fehler kommt.

Ich habe den Fehler inzwischen gefunden: Es wird sinngemäß aufgerufen: Round(5.23 / 4.4e-17) und das liegt außerhalb des Integerbereichs.

Nichtsdestotrotz weiß ich einfach nicht, wie ich hätte herausbekommen können, WELCHER der vielen Round-Befehle den Fehler verursacht. Es ist einfach blöde, dass man in die Round-Routine direkt reinkommt mit den Debugger und nicht wieder eine Stufe höher zu dem Aufruf dieser Routine kommt.

Gibt es da echt keine Lösung?

Wie kann ich jetzt den Fehler des Round abfangen?

HJay 22. Mär 2012 13:30

AW: Verwendung des Debuggers in Delphi6?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1157954)
Setzt du auf externe Komponenen auf die DirectX oder OpenGL verwenden?

Nein. (Trotzdem danke)

Klaus01 22. Mär 2012 13:40

AW: Verwendung des Debuggers in Delphi6?
 
Zitat:

Zitat von HJay (Beitrag 1157957)
Ich habe den Fehler inzwischen gefunden: Es wird sinngemäß aufgerufen: Round(5.23 / 4.4e-17) und das liegt außerhalb des Integerbereichs.
..

Wie kann ich jetzt den Fehler des Round abfangen?

.. was wird denn berechnet, gibt es irgendwo definierte maximal bzw. minimal Werte
für den Nenner?

Ansonsten Exception abfangen und entsprechend reagieren.

Grüße
Klaus

HJay 22. Mär 2012 13:56

AW: Verwendung des Debuggers in Delphi6?
 
Ja, danke, ich fange jetzt die Exception ab.

Dennoch schade, dass es keine Lösung gibt, den Debugger zu instruieren, den aufrufenden Befehl auszugeben statt die aufgerufene Routine.

guinnes 22. Mär 2012 14:23

AW: Verwendung des Debuggers in Delphi6?
 
Dafür gibts den Aufruf-Stack ( Strg + Alt + S )

jaenicke 22. Mär 2012 15:21

AW: Verwendung des Debuggers in Delphi6?
 
Wobei der Aufrufstack nebenbei gesagt bei Delphi 2005 und höher im Debugmodus standardmäßig angezeigt wird. :zwinker:

himitsu 22. Mär 2012 15:42

AW: Verwendung des Debuggers in Delphi6?
 
Man sich diesen aber besser schon kurz vor der Exception ansehn sollte, da er nach der Exception oftmals nicht korrekt aufgebaut wird.
> warten bis es knallt > Anhalten > Haltepunkt setzen > Neu starten > und hoffen man kommt zur richtigen Zeit bis zum Haltepunkt > Stacktrace angucken


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