2017-01-17 4 views
0

Ich weiß, das Umbrechen mit Makro kann verwendet werden, um den Aufrufer einer Funktion zu erhalten. Aber wenn es um Konstrukteure geht, ist es meines Wissens nicht möglich. Ich benutze nicht gcc so Backtrace() Funktion ist keine Option für mich.Wie bekomme ich den Aufrufer eines bestimmten Konstruktors?

Edit: Ich benutze msvc.

+1

Benötigen Sie dies zum Debuggen? –

+0

Ja. Ich werde es benutzen, um Bugs zu entdecken. – wArtist

+0

Wie wäre es mit einem Debugger? –

Antwort

0

Ein ideales Werkzeug hierfür ist ein Debugger, bei dem Sie keine Änderungen an Ihrem Programm vornehmen müssen.

Wenn Sie jedoch wirklich den Aufrufer lokal innerhalb des Programms erhalten möchten, ist das auch möglich - aber nicht in Standard C++, ohne plattformspezifische oder Wrapper-Bibliotheken zu verwenden (außer den Konstruktor zu ändern und den Makrotrick zu verwenden).


Ich benutze gcc nicht so Backtrace() Funktion für mich keine Option ist.

Dann müssen Sie herausfinden, welche Compiler Sie sind verwenden, und verwenden, was Alternative bieten sie für Stapel Abwickeln.

Es gibt eine portable Bibliothek libunwind, die Sie verwenden könnten, die ohne Zugriff auf Backtrace funktioniert. Es scheint jedoch nicht auf Windows portiert zu werden.


ich mit Makro-weiß Verpackung kann für das Erhalten Aufrufer einer Funktion

Wrapping die Initialisierung verwendet werden soll, in einer ähnlichen Art und Weise arbeiten.

+0

Ich habe versucht, Konstruktor zu wickeln, aber es hat nicht funktioniert. – wArtist

+0

@wArtist hat sich Ihr Versuch vom Umbruch einer regulären Funktion unterschieden? – user2079303

+0

Nein, ist es nicht. '#define somefunc (x) somefunc (x, __FILE__, __LINE__); #define someClass (x) someClass (x, __FILE__, __LINE __); ' Der zweite funktioniert nicht, da someClass ein Klassenname ist. – wArtist

Verwandte Themen