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%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.
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