Datei und Zeile eines Funktionsaufrufes ermitteln?
-
Wie kann ich ermitteln, in welcher Datei und in welcher Zeile eine belibige Funktion aufgerufen wir?
Den Namen der aktuellen Funktion kann man ja mit __FUNC__ auslesen und die aktuelle Zeile mit __LINE__ - wie nun aber den Ort des aufrufes einer Funktion.
Noch eine Frage. Wie kann ich erlauben in meinem Quellcode Umlaute zu verwenden
Bsp.:int Beiträge = 0;Grüße & Danke
-
Hallo
Wie kann ich ermitteln, in welcher Datei und in welcher Zeile eine belibige Funktion aufgerufen wir?
Den Namen der aktuellen Funktion kann man ja mit __FUNC__ auslesen und die aktuelle Zeile mit __LINE__ - wie nun aber den Ort des aufrufes einer Funktion.
Da der Aufruf nicht statisch beim Compilieren in den Quellcode geschrieben werden kann, sondern erst zur Laufzeit festgestellt werden kann nicht über Makros. Das geht nur über Breakpoints und die Stack-Übersicht des Debuggers oder über selbstgeschriebene Logging-Funktionen.
Noch eine Frage. Wie kann ich erlauben in meinem Quellcode Umlaute zu verwenden
Gar nicht. Der C++ Standard erlaubt für Symbole ausschließlich lateinische Buchstaben (und Unterstriche sowie Dezimalziffern nach dem ersten Zeichen).
bis bald
akari
-
Danke für die Antwort!
Schade das Umlaute nicht verwendet werden können!
Wie schreibe ich mir eine Logging-Funktion? Was ist das überhaupt? Kannst du mir mal ein Beispielcode schreiben?
Danke!
-
Hallo
Als einfachstes schreibst du dir eine kleine Funktion die einen String übernimmt und in eine festgelegte Datei anhängt (siehe TFileStream oder std::ofstream).
Diese Funktion rufts du nun manuell von jeder Funktion aus auf deren Aufruf du verfolgen willst. Als String übergibst du nun entweder den Namen der Funktion selber oder zum Beispiel Variablenwerte. Das ganze kann man noch zu ganzen Logging-Klassen ausbauen.In den meisten Fällen reicht allerdings die bestehenden Funktionen des Debuggers aus.
bis bald
akari
-
Jede Funktion hat doch eine Rücksprungadresse ... kann man das nicht irgendwie nutzen, um den Ort des Funktionsaufrufes zu erhalten?
-
Hallo
Warum solltest du dich mit internen Compiler-spezifischen Details herumschlagen wenn du doch die Sachen benutzen kannst die dir der Compiler anbieten kann? Außerdem nutzen dir Adressen alleine gar nichts. Denn zur Laufzeit gibt es keine Symbolnamen mehr. Du würdest also gar nicht den C++ Namen einer Funktion rausbekommen, nur weil du eine Adresse hast. Vielleicht kann man etwas mit zusätzlichen Debug-Symbolen machen... aber der Aufwand dürfte kaum den Nutzen Wert sein.
bis bald
akari
-
Ich möchte mir eine kleine Programmierhilfe schreiben.
Ein Logbuch soll die Fehlersuche erleichtern.
Im Logbuch soll dann etwas in der Form drin stehen:
Fehler beim Ausführen der Funktion A in der Zeile X der Datei Y.dat! Fehlerbeschreibung: Division durch 0!Dazu muss ich aber rauskriegen, wo welche Funktion aufgerufen wird. __LINE__ ist dafür nicht geeignet.
Irgendwie muss man das doch lösen können ...
Grüße
-
Edit: Ich seh grad, das war wohl nonsense ... bitte löschen!

-
Hallo,
also in meinen (DOS)-Projekten deklariere ich eine statische Variable innerhalb der Quelltextdatei (einfach ID genannt) der ich dann (unter anderem) den Dateinamen zuordne:
static char id[] = "hier der Name der quelltextdatei und andere infos"Bsp.:
static char id[] = "$RCSfile: blabla.c $$Revision: 1.00 $"(RCSfile und Revision werden von meinem RCS-System automatisch ersetzt)
Darauf greife ich dann einfach bei diversen Funktionen zu.
mfg
Frank