Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Zur Laufzeit, Zeilennummer feststellen (https://www.delphipraxis.net/196005-zur-laufzeit-zeilennummer-feststellen.html)

Eppos 13. Apr 2018 17:04

Zur Laufzeit, Zeilennummer feststellen
 
Hallo zusammen,

gibt es die Möglichkeit zur Laufzeit die Zeilennummer im Code auszugeben.

Beispiel:
101
102
103 ShowMessage( {Zeilennummer} );
104

Fenster: 103

Gruß
Eppos

Der schöne Günther 13. Apr 2018 19:17

AW: Zur Laufzeit, Zeilennummer feststellen
 
Ohne großen Aufwand kenne ich nichts außer Assert(..)

Delphi-Quellcode:
procedure p(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
begin
   ShowMessage( LineNumber.ToString() );
end;

procedure TForm19.Button1Click(Sender: TObject);
begin
   System.AssertErrorProc := p;
   assert(false, 'message');
end;

Kannst du ein praktisches Beispiel geben wofür du das brauchst? Geht sicher besser.

Eppos 16. Apr 2018 08:35

AW: Zur Laufzeit, Zeilennummer feststellen
 
Ich würde gerne ausgeben, an welcher Stelle ein Fehler auftritt.

haentschman 16. Apr 2018 08:43

AW: Zur Laufzeit, Zeilennummer feststellen
 
Moin...:P
http://www.madshi.net/

http://help.madshi.net/madExceptDemo.htm

Eppos 16. Apr 2018 08:57

AW: Zur Laufzeit, Zeilennummer feststellen
 
Das deckt leider nicht mein internes Fehlerhandling ab. 8-)

KodeZwerg 16. Apr 2018 09:13

AW: Zur Laufzeit, Zeilennummer feststellen
 
Fehler Behandlungs Beispiel:
Delphi-Quellcode:
 var
   number1, number0 : Integer;
 begin
   try
     number0 := 0;
     number1 := 1;
     number1 := number1 div number0;
     ShowMessage('1 / 0 = '+IntToStr(number1));
   except
     on E : Exception do
     begin
       ShowMessage('Exception ClassName = '+E.ClassName); // hier gibt's den ClassName des Verursachers
       ShowMessage('Exception Nachricht = '+E.Message); // und seine Fehlermeldung
     end;
   end;
 end;

Man kann auch auf verschieden Fehler in On Events reagieren, Beispiel:
Delphi-Quellcode:
  except
     On E : EInOutError do
       ShowMessage('IO Fehler : '+E.Message);
     On E : EDivByZero do
       ShowMessage('Division durch NULL : '+E.Message);
     else
       ShowMessage('andere Fehler');
   end;
Für Zeilennummern solltest Du Dich mit
Delphi-Quellcode:
on e: exception do begin showmessage(e.StackTrace); end;
und GetStackInfoStringProc beschäftigen.


edit
Link1 und Link2 wo ich diese Informationen her habe.

p80286 16. Apr 2018 09:48

AW: Zur Laufzeit, Zeilennummer feststellen
 
Könntest Du Dich etwas ausführlicher äußern?
Eine Exception zeigt im allg. auch die Position im Compilat an, an der es knallt. Mit Hilfe des Debuggers kommt man dann zu der fehlerhaften Sourcecodestelle.

Gruß
K-H

haentschman 16. Apr 2018 10:31

AW: Zur Laufzeit, Zeilennummer feststellen
 
Zitat:

Das deckt leider nicht mein internes Fehlerhandling ab.
...:gruebel: verstehe ich nicht. Was hat der madExcept nicht?

Eppos 16. Apr 2018 11:29

AW: Zur Laufzeit, Zeilennummer feststellen
 
Danke für die Vielzahl von Antworten.

Wir haben ein eigenes Fehlerhandling programmiert. Die Vorgabe war, keine externen Hilfsmittel zuzulassen (madExcept).
Fehler zu melden, die nicht systemseitig erzeugt werden, sondern durch andere Fälle entstehen werden bei uns gesammelt und ausgewertet.

himitsu 16. Apr 2018 12:23

AW: Zur Laufzeit, Zeilennummer feststellen
 
Im Compilat gibt es keine Zeilennummern mehr.

Bei Assert wird vom Compiler an der Stelle die Zeilennummer einkompilert,
aber sowas wie _FILE_ und _LINE_ ala PHP oder anderer Scriptsprachen gibt es leider nicht.

Alle anderen Varianten nehmen die Debuginfos, bzw. die MAP-Datei, welche der Compiler/Linker erstellen kann, und lesen/suchen daraus die naheliegenste Zeile zur entsprechenden Codeposition.
Wenn keine Fremdkomponenten genommen werden sollen, damm müsst ihr eben das alles selber machen.

Eurekalog und vermutlich auch madExcept nehmen die MAP-Datei, holen sich diese Infos da raus und hängen sie in einem eigenen Format als Ressource an das Compilat an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Seite 1 von 4  1 23     Letzte »    

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