AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In welcher Methode bin ich?

Ein Thema von Luckie · begonnen am 16. Aug 2007 · letzter Beitrag vom 17. Aug 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: In welcher Methode bin ich?

  Alt 16. Aug 2007, 20:56
@Sirius, ja das ist schon kompliziert besonders weil die Addresse an der die Exception ausgelösst wurde durch Delphi manches mal falsch berechnet wird, statt +4 Offset mit +5 Offset.

Am sichersten ist die Methode der JCL, auch wenn sie sagen wir mal von Hinten durch die Brust in's Auge ist. Borland hätte einfach seine vom Turbo Debugger bekannten TD Files als eigenes Segment weiterhin in die EXE einlinken lassen sollen. Leider hat Borland dieses sehr gute Features (zu DOS Zeiten einfach spitze) nicht konsequent weiterverfolgt. Mit der Übernahme des Intel Compilers ab Version 5 glaube ich hat sich das eh erledigt.

Gruß hagen
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#12

Re: In welcher Methode bin ich?

  Alt 16. Aug 2007, 21:34
Tscha, da sieht man doch wiedermal die Vorteile eines Präprozessors


... ich verbleibe mit einem herzlichen __FUNCTION__ ,
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: In welcher Methode bin ich?

  Alt 16. Aug 2007, 23:03
@Olli, das musst du mir erklären ? Was hat der Präprozessor damit zu tun, bzw. was kann er zum Problem beitragen ?

Hm, es sei denn du überschreibst den Funktionsbegriff per Präprozessor mit eigener DEFINE um zusätzliche Infos irgendwo abzulegen. Allerdings frage ich mich wie das aussehen soll, benötigt der Präprozessor doch Zugriff auf den Linker um das Namemangeling auswerten zu können. Übersehe ich da was ?

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#14

Re: In welcher Methode bin ich?

  Alt 16. Aug 2007, 23:27
Der Pärprozessor ersetzt __FUNCTION__ durch einen literalen string, der der bezeichnung der aktuellen methode entspricht. D.h. globale Variable "string CurrFunc = "";", in jeder Methode "CurrFunc = __FUNCTION__", bei Exceptions o.ä. CurrFunc ausgeben.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 00:38
haste ein Link zu einem Beispiel ?

[edit]
vergiß es, habs schon gefunden. Man lernt nie aus.

Wobei das ja nicht zwangsläufig einen Präprozessor benötigt. Ein Compiler-Magic in Delphi würde ja auch gehen, wenn wir die Sourcen von Borland bekämen
[/edit]

Gruß hagen
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#16

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 00:45
Bsp. mein DDKWizard:

Code:
#if DBG
   #ifdef ADVANCED_DEBUG
   #define DebugPrint DbgPrint("[%s] %s (line: %d)\n", __##FILE##__, __##FUNCTION##__, __##LINE##__); DbgPrint
   #else
   #define DebugPrint DbgPrint
   #endif
#else
#define DebugPrint /##/DbgPrint
#endif
Was macht das (Annahme ADVANCED_DEBUG=1 und DBG=1)? Bei jeder Erwaehnung von "DebugPrint(parameter)" wird ein DbgPrint davorgestellt, weshalb es nach dem Einfuegen so aussieht:

Code:
DbgPrint("[%s] %s (line: %d)\n", __FILE__, __FUNCTION__, __LINE__); DbgPrint(parameter)
Somit wird das beim eigentlichen finalen Durchlauf des Praeprozessors als, bspw.:

Code:
DbgPrint("[%s] %s (line: %d)\n", "bla.cpp", "CMeineKlasse::MeineMethode", 37); DbgPrint(parameter)
... interpretiert.

Ziemlich bequem


... dank Praeprozessor leiste ich mir sowas dann auch nur im Debug-Build, womit die Performanceeinbussen auch nicht spuerbar sind, der Nutzen beim Debuggen allerdings schon.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#17

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 00:49
Mittlerweile klar, nächstes mal bitte nicht so trödeln (habe ich dich zu so später Zeit aus der Kiste geholt? bin beim Warten auf deine Antwort fast eingepennt )

Allerdings bin ich mir noch nicht ganz im klaren ob das der Präprozessor macht oder der Compiler.
Die http://www.cs.cmu.edu/cgi-bin/info2www?(gcc.info)Function%20Names behaupten das der Compiler das macht.
Ok, macht aber keinen großen Unterschied für mich ob der Spaten aus Plastik oder Stahl ist, hauptsache er gräbt
Ich arbeite nun schon einige Zeit mit C und ich kannte eben diese Direktiven noch nicht, deshalb meine verdutzte Frage.

Gruß Hagen
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#18

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 00:59
Zitat von negaH:
Ok, macht aber keinen großen Unterschied für mich ob der Spaten aus Plastik oder Stahl ist, hauptsache er gräbt
Waere tatseachlich egal. Ich benutzte es bisher nur als Praeprozessor-Symbol und in meinen C-Buechern war es auch als solches ausgegeben.


Einerlei. Nein, hast mich nicht geweckt. Da Island, 2 Stunden Zeitverschiebung. Hier ist's gerade ~0:00 wenn ich das abschicke.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#19

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 12:17
Zitat von Olli:
Zitat von negaH:
Ok, macht aber keinen großen Unterschied für mich ob der Spaten aus Plastik oder Stahl ist, hauptsache er gräbt
Waere tatseachlich egal. Ich benutzte es bisher nur als Praeprozessor-Symbol und in meinen C-Buechern war es auch als solches ausgegeben.
Mit einem Spaten aus Plastik hat man jedoch nur kurze Zeit freude oder bei leichtem Sand. Tief wird man nicht kommen
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: In welcher Methode bin ich?

  Alt 17. Aug 2007, 13:03
Zitat von negaH:
@Sirius, ja das ist schon kompliziert besonders weil die Addresse an der die Exception ausgelösst wurde durch Delphi manches mal falsch berechnet wird, statt +4 Offset mit +5 Offset.
Das ist mir noch nicht aufgefallen. Wo denn? Der nimmt doch einfach die Rücksprungadresse nach "Raise" (bzw. RaiseExcept).
Mein größtest Problem sind eher HandleAnyException und wo self liegt. Aber wenn man jetzt in den Methoden anfängt extra Infos zu hinterlegen, dann kann man doch auch gleich an die Exception-Klasse eigene Eigenschaften mitgeben.


(Unter TP war ich noch nicht so tief in die Materie eingestiegen.)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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