Gibt es eine Möglichkeit, die Argumentabzüge eines Compilers zu verfolgen?

8

Ich suche nach einer Möglichkeit, ein Trace-Protokoll aus der Logik des Compilers zu erhalten, wenn es versucht, Template-Argumenttypen abzuleiten, wann immer es Erfolg hat oder nicht. So zum Beispiel gegeben dann Code:

%Vor%

Ich würde gerne etwas wie:

erhalten %Vor%

Compiler sind schon ziemlich gut darin, zum Beispiel die mehrdeutigen Aufrufe zu liefern. Z.B. Wenn ich foo(std::string("qwe")); aufrufen würde, bekomme ich:

%Vor%

Und wenn diese explizite Rückmeldung nicht möglich ist, gibt es vielleicht eine Möglichkeit, den "semi-kompilierten" Code zu sehen, wobei alle Vorlagenabzüge bereits durchgeführt wurden.

Hat einer der Compiler diese Funktion? gcc, klingeln, mvsc?

Hintergrund:

Dieses Beispiel ist ziemlich einfach und offensichtlich, aber ich experimentiere mit ranges::v3 library und habe Mühe herauszufinden, warum ein bestimmter Fall funktioniert und warum der andere nicht. (Technisch liefert iterator_range<Handmade InputIterator> piped mit view::take(3) % void anstatt% fancy range , ist aber nicht von dieser Frage betroffen. Ich möchte den Abzug auf fast derselben Linie verfolgen, aber mit iterator_range<ContiguousIterator> und sehe den Unterschied .

    
R2RT 16.02.2018, 13:03
quelle

1 Antwort

6

Templight ist ein clangbasiertes Tool zum Verfolgen des Fortschritts von Template-Instanziierungen. Es hat eine Schnittstelle ähnlich dem GDB-Debugger, so dass Sie sich auf eine bestimmte Instanziierung konzentrieren können, die Fehler verursacht oder sich nicht wie erwartet verhält. Oder Sie können ein "Profil" der Template-Instanziierungen ausgeben, die einen Überblick über alle von ihnen geben.

Es gibt auch ein ähnliches Tool Templer , das offensichtlich eine grafische Oberfläche zu Templights Debugger-Modus ist, obwohl ich es selbst nicht ausprobiert habe .

    
aschepler 16.02.2018, 13:44
quelle

Tags und Links