Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sowas wie __LINE__ in Delphi? (https://www.delphipraxis.net/59965-sowas-wie-__line__-delphi.html)

Die Muhkuh 31. Dez 2005 16:19


Sowas wie __LINE__ in Delphi?
 
Hi,

gibt es sowas wie __LINE__ auch in Delphi um an die Codezeile zukommen?

Bei einem Assertion steht ja auch die Codezeile dabei :)

MfG,

Manu

MagicAndre1981 31. Dez 2005 16:24

Re: Sowas wie __LINE__ in Delphi?
 
Ist bei den JEDIs dabei.

Die Muhkuh 31. Dez 2005 16:26

Re: Sowas wie __LINE__ in Delphi?
 
Hmm? Wo und wie heißt das Teil?

(Ginge aus auch ohne Jedis?)

jim_raynor 31. Dez 2005 16:28

Re: Sowas wie __LINE__ in Delphi?
 
Nein. Sowas wie LINE gibt es in Delphi nicht. Bei C/C++ und wer das alles kennt, ist es im Preprozessor eingebaut. Die einzigste Funktion, die automatisch Modul/Zeile ergänzt bekommt ist Assert. Aber ist halt Compiler Magic und du kommst an den Wert nicht ran.

sakura 31. Dez 2005 16:29

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von jim_raynor
Die einzigste Funktion, die automatisch Modul/Zeile ergänzt bekommt ist Assert. Aber ist halt Compiler Magic und du kommst an den Wert nicht ran.

Wie oben schon geschrieben, stimmt das so nicht ;) madExcept kann es auch.

...:cat:...

Die Muhkuh 31. Dez 2005 16:30

Re: Sowas wie __LINE__ in Delphi?
 
Hmm, außer es ist bei den JEDIs dabei :mrgreen:

[edit] @Daniel, weißt du auch wie? [/edit]

Bernhard Geyer 31. Dez 2005 16:32

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von jim_raynor
Nein. Sowas wie LINE gibt es in Delphi nicht. Bei C/C++ und wer das alles kennt, ist es im Preprozessor eingebaut. Die einzigste Funktion, die automatisch Modul/Zeile ergänzt bekommt ist Assert. Aber ist halt Compiler Magic und du kommst an den Wert nicht ran.

Gibt's freilich. Entweder in der Jedi oder der MemChecker bzw. FastMM bekommen die Zeilen ja auch raus um die Speicherlücken anzuzeigen.

sakura 31. Dez 2005 16:33

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von Spider
[edit] @Daniel, weißt du auch wie? [/edit]

Ja, da ich es auch schon gemacht habe :mrgreen:

Delphi kann eine MAP-File erzeugen. In dieser stehen die Offsets zu jeder Zeile/Datei drinne und anhand dieser kann man die aktuelle Zeile ermitteln ;)

...:cat:...

Die Muhkuh 31. Dez 2005 16:34

Re: Sowas wie __LINE__ in Delphi?
 
Ja, kann mal einer sagen wie die Kompo bei den Jedis heißt. :roll: :mrgreen:

Ich möchte einen Fehlerreport erzeugen, in dem die Codezeile drinne steht.

Bernhard Geyer 31. Dez 2005 16:38

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von Spider
Ja, kann mal einer sagen wie die Kompo bei den Jedis heißt. :roll: :mrgreen:

Ich möchte einen Fehlerreport erzeugen, in dem die Codezeile drinne steht.

Schau dir mal die mitgelieferten Beispiele FramesTrackExample und StackTrackExample an.

jim_raynor 31. Dez 2005 16:39

Re: Sowas wie __LINE__ in Delphi?
 
Sowas wie LINE gibts trotzdem nicht ;) Bei C++ wird LINE als Compiler-Konstante interpretiert und kann auch so verwendet werden.

Man kann nur die Zeile anhand einer Adresse ermitteln, wenn die gesamte Map-Datei an die EXE mit rangehängt wird und diese vergrößert die EXE deutlich. Ohne diese Map, kann man die Adresse nicht auf eine Unit/Zeilennummer zurückrechnen.

Aber, zum Erzeugen eines Fehlerreports ist vielleicht MadExcept besser, da dieser noch ein paar mehr Informationen erstellt und schon eine Mail-Funktion integriert hat.

Die Muhkuh 31. Dez 2005 16:47

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von jim_raynor
Aber, zum Erzeugen eines Fehlerreports ist vielleicht MadExcept besser, da dieser noch ein paar mehr Informationen erstellt und schon eine Mail-Funktion integriert hat.

Ich weiß, aber wenn ich madExcept aktiviert ist meine Exe auch um einiges größer ;)

Die Muhkuh 31. Dez 2005 16:52

Re: Sowas wie __LINE__ in Delphi?
 
So,

ich hab mir jetzt die zwei Demos mal angesehen und die erfüllen ja fast meinen Zweck. Wobei bei der Frames-Demo Line immer 0 war.

Das Problem ist ja, ich möchte nur die Zeilennummer, der Rest, was z.B. bei der Stack-Demo ausgegeben wird, bräuchte ich gar nicht. Kann man das irgendwie "wegschalten"?

jim_raynor 31. Dez 2005 16:52

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von Spider
Ich weiß, aber wenn ich madExcept aktiviert ist meine Exe auch um einiges größer ;)

Das ist bei den Jedis auch nicht anders ;)

Die Muhkuh 31. Dez 2005 16:56

Re: Sowas wie __LINE__ in Delphi?
 
Hi,

manchmal sieht man den Wald vor lauter Bäumen nicht :mrgreen:

In der Unit JclDebug gibts eine Funktion __LINE__ die genau das tut, was ich brauche :)

Die Muhkuh 31. Dez 2005 16:59

Re: Sowas wie __LINE__ in Delphi?
 
Zitat:

Zitat von jim_raynor
Zitat:

Zitat von Spider
Ich weiß, aber wenn ich madExcept aktiviert ist meine Exe auch um einiges größer ;)

Das ist bei den Jedis auch nicht anders ;)

madExcept machen > 200kb aus. JclDebug ~ 30 kb ;)

jbg 31. Dez 2005 17:28

Re: Sowas wie __LINE__ in Delphi?
 
Die braucht aber auch .map oder td32-Daten or jdbg-Daten.

Die Muhkuh 31. Dez 2005 17:33

Re: Sowas wie __LINE__ in Delphi?
 
Ja gut, stimmt auch wieder.

Vllt. lass ich einfach die Zeilennummern weg. Die Map-Datei ist auch grad mal 800kb groß.^^

jbg 31. Dez 2005 17:39

Re: Sowas wie __LINE__ in Delphi?
 
Die jdbg-Daten werden an die Exe angehängt und sind ungefähr 10-15% der original Exe-Größe (wenn natürlich die .dfm Dateien aufblähen ist das Verhältniss anders).


Alternativ kann man auch einen Präprozessor schreiben, der __LINE__ durch eine max. 8-stellige Zahl ersetzt um nicht die Spaltennummer zu verändern.


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