Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Debugging: Fehlerzeile wird nicht angezeigt (https://www.delphipraxis.net/145754-debugging-fehlerzeile-wird-nicht-angezeigt.html)

Rakshasa 7. Jan 2010 20:41


Debugging: Fehlerzeile wird nicht angezeigt
 
Hallo,

ich habe eine kurze Frage zum Debugging: Bei einem Fehler wird bei mir leider nicht die eigentliche Quellcodezeile des Fehlers angezeigt, sondern nur der Aufruf der Prozedur, in welcher der Fehler aufgetreten ist. Dies tritt allerdings nur bei eigenen Prozeduren auf, bei Fehlern, die bspw. innerhalb eines Button.OnClick() auftreten, springt der Debugger korrekt zu der jeweiligen Quellcodezeile.

Woran kann das liegen? Muss ich irgendwelche besonderen Einstellungen vornehmen?

Jens Hartmann 7. Jan 2010 22:53

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Hallo Rakshasa

Zitat:

Zitat von Rakshasa
Dies tritt allerdings nur bei eigenen Prozeduren auf

ich habe das gerade mal bei mir getestet und einnen Fehler in eine eigen Prozedure von mir eingebaut. Bei mir spring der Debugger in die richtige Zeile.

Ich würde vieleicht tippen, das die Prozedure gar nicht den Fehler hat. Was steht den im Meldungsfenster.

Gruß Jens

Rakshasa 8. Jan 2010 11:59

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Ok, ich habe das etwas spezifizieren können: Der Fehler tritt anscheinend immer nur dann auf, wenn der Fehler durch eine Pointer-Operation ausgelöst wird. Der Fehler ist mit folgender Proezdur reproduzierbar:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
begin

 DoTest;
end;

Procedure TForm1.DoTest;
var
list: TList;
x: ^integer;
begin

// list := Tlist.create; <-- Um den Fehler zu provozieren...
New(x);
x^ := 12;
list.add(x);


end;
Der Fehler tritt auf, weil list nicht initialisiert wurde - der Debugger spring leider nur auf die Zeile nach DoTest() bei Button1.Click.

Warum ist das so?

freak4fun 8. Jan 2010 12:02

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
In dem Fall würde ich einen Breakpoint auf die Prozedur setzen und da rein gehen. ;)

himitsu 8. Jan 2010 12:08

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Der Compiler Debugger hält in der nächsten Zeile, welche er ausführen würde, wenn man danach weitermacht.
(ab D2009 scheint dieses Verhalten aber geändert zu sein und dort hält er oftmals in der Fehlerzeile)

Delphi-Quellcode:
var
list: TList;
x: ^integer;
begin
bei deiner Prozedur muß Delphi im End nichts machen, weswegen er dann vermutlich gleich ganz aus der Prozedur rausspringt. :gruebel:

p80286 8. Jan 2010 12:55

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Bei den älteren Versionen, wird (wenn in der IDE ausgeführt) in der Zeile nach der fehlerhaften Procedure/Function angehalten.

Ich mach es so das ich bis dahin mit F4 springe und dann die Procedure/Function mit F7 Schritt für Schritt abarbeite.

Gruß
K-H

Rakshasa 8. Jan 2010 13:01

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Zitat:

Zitat von p80286
Bei den älteren Versionen, wird (wenn in der IDE ausgeführt) in der Zeile nach der fehlerhaften Procedure/Function angehalten.
Ich mach es so das ich bis dahin mit F4 springe und dann die Procedure/Function mit F7 Schritt für Schritt abarbeite.

Hm...so geht es natürlich - sofern keine Schleifen von mehreren Hundert Einträgen in der jeweiligen Prozedur aufgerufen werden, wie das bei mir leider der Fall ist. Und wenn dann bei Eintrag xx von 100 eines Pointer-Arrays der Fehler auftritt...

Irgendwie ist es schon nervig, dass ich nur den Prozedur-Aufruf angezeigt bekomme und nicht den jeweiligen Fehler in der Prozedur. :-/

himitsu 8. Jan 2010 13:22

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Zitat:

Zitat von Rakshasa
Hm...so geht es natürlich - sofern keine Schleifen von mehreren Hundert Einträgen in der jeweiligen Prozedur aufgerufen werden, wie das bei mir leider der Fall ist. Und wenn dann bei Eintrag xx von 100 eines Pointer-Arrays der Fehler auftritt...

- Kontextmenü des Haltepunkt (Rechtsklick links auf den Punkt)
- Haltepunkt-Eigenschaften
- ...

- Durchlaufzähler 100 : es wird erst beim 100-sten Durchlauf (zusammenhängend mit F5, F8 und Co.) angehalten

- Bedingung "i = 100" : es wird nur angehalten, wenn i = 100 ist

so, nun kannst du dich an dein Problem herantasten


ansonsten mußt du halt eine Loggingfunktion einrichten und IM Programm mitloggen, was wann passiert ist

Leanahtan 8. Jan 2010 13:59

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Zitat:

Zitat von Rakshasa
Zitat:

Zitat von p80286
Bei den älteren Versionen, wird (wenn in der IDE ausgeführt) in der Zeile nach der fehlerhaften Procedure/Function angehalten.
Ich mach es so das ich bis dahin mit F4 springe und dann die Procedure/Function mit F7 Schritt für Schritt abarbeite.

Hm...so geht es natürlich - sofern keine Schleifen von mehreren Hundert Einträgen in der jeweiligen Prozedur aufgerufen werden, wie das bei mir leider der Fall ist. Und wenn dann bei Eintrag xx von 100 eines Pointer-Arrays der Fehler auftritt...

Irgendwie ist es schon nervig, dass ich nur den Prozedur-Aufruf angezeigt bekomme und nicht den jeweiligen Fehler in der Prozedur. :-/

Du könntest auch mit Try except (innerhalb der Schleife) arbeiten - und dann im except den Haltepunkt setzen, dann weißt du auch, in welchem Durchlauf du bist.

hoika 8. Jan 2010 14:02

Re: Debugging: Fehlerzeile wird nicht angezeigt
 
Hallo,

wie sehen überhaupt die Compiler-Optionen aus ?

Hast du mal ein komplettes Build gemacht ?


Heiko


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