Wie erhält man den Namen, die Datei oder die Zeile der Aufrufermethode?

8

Gibt es in C ++ 11 (mit dem letzten GCC) eine Möglichkeit, den Namen oder die Datei- und Zeilennummer von der Methode zu erhalten, die die aktuell ausgeführte Methode aufruft (der Aufrufer)?

Ich möchte diese Informationen in einer Fehlermeldung verwenden, wenn beispielsweise der folgende Code fehlschlägt:

%Vor%

Zur Zeit habe ich Code, der den Fehler in DoSomething meldet. Obwohl das technisch zutrifft, möchte ich, dass der Fehler in SomewhereInMyProgram gemeldet wird, wo immer er auch sein mag. Das würde mein Leben viel einfacher machen!

Die Lösung kann alle C ++ 11-Funktionen, Makros oder GCC-spezifischen Dinge verwenden, aber nicht etwas, das ich an jeder einzelnen Aufrufseite hinzufügen muss.

Ich denke, ein Stacktrace wird mir nicht helfen, weil ich die Ausnahmebehandlung nicht verwenden kann. Eigentlich bin ich sehr begrenzt: Es ist eine freistehende Umgebung, in der die Standard-C ++ - Header nicht verfügbar sind. Ich habe auf eine Makro-Lösung gehofft.

%Vor%     
Virtlink 08.04.2013, 16:58
quelle

3 Antworten

5

Wrap DoSomething in einem Makro:

%Vor%

HAFTUNGSAUSSCHLUSS:

Das ist nicht das Beste, Leute schreien auf WIN-API-Makros, die auf diese Weise für ANSI oder UNICODE definiert sind. Aber ich glaube, das ist die einzige Möglichkeit, wenn Sie nicht jeden Aufruf von DoSomething ändern möchten.

    
Tomek 08.04.2013 17:28
quelle
1

Nach meinem besten Wissen besteht die einzige Möglichkeit, AUTOMATISCH Informationen über vorherige Aufrufe zu erhalten, in der Verwendung eines Backtrace. Dieser Beitrag enthält eine Menge Informationen darüber:

Wie erzeuge ich einen Stacktrace wenn meine gcc C ++ app stürzt ab

    
krowe 08.04.2013 17:09
quelle
-2

In gcc können Sie eines der folgenden Makros verwenden: __PRETTY_FUNCTION__ oder __FUNCTION__ oder __func__ .

    
Amartel 08.04.2013 17:59
quelle

Tags und Links