Esistono strumenti per trasformare il codice sorgente in C++ nel codice sorgente in C/C++, ma con modelli istanziati (srotolati)? Ciò è necessario per una comprensione non ambigua, nel codice che convertono i modelli di codice C++. Può essere presente negli IDE (MSVS, QtCreator, ...) o nei compilatori (ICC, GCC, MSVC, Clang)?Esistono strumenti per trasformare il codice sorgente in C++ nel codice sorgente in C/C++, ma con modelli istanziati (srotolati)?
6
A
risposta
4
questo sembra giá risposto su SO
- Debugging template instantiations
- link 2
- link 3 (con una bella carta da troppo)
- How do you debug heavily templated code in c++?
L'Idea/principio da Alexey Frunze a usare il codice smontato è abbastanza buono, insieme con l'uso di modelli semplificati c'è una buona possibilità di capire esattamente cosa fa.
Modifica 1 Ci sono poche altre possibilità come ottenere una comprensione delle cose che il compilatore aveva fatto
- Usa:
gcc -S -O1 {yourcode.cpp}
per ottenere il montaggio e utilizzare lo strumentoc++filt
(la sua parte di binutils per convertire il disassemblaggio a C-codice se si sente più confortevole con C-code - Usa:
g++ -fdump-tree-original file.cpp
per ottenere un po 'di (pseudo) codice C++ - Utilizzare il MSVC++ debugger w on il punto di interruzione dopo l'ultima instatiation e vedere tutti i tipi e valori che sono i parametri del modello instatiated
- Usa: GCC XML per la generazione di XML con i modelli istanziati (FAQ)
- sapere come il compilatore instatiated e ottimizzato i modelli che si può usare Clang:
-emit-llvm
per ottenere la LLVM IR, e utilizzarellvm-dis
per convertirlo in testo - Comeau C++ in grado di "compilazione" C++ per il codice C, ma ora il compilatore non è più mantenuto
1
È possibile aggirare il problema posizionando un errore intenzionale all'interno dell'istanza o dei suoi parametri, quindi il compilatore (supponendo versioni decenti: gcc 4.8, clang, ecc.) Restituisce qualcosa sulla falsariga di: "errore con template XXX istanziato con A = int, B = float, .. ".
Problemi correlati
- 1. Esistono strumenti per convertire il codice sorgente c/C++ in html?
- 2. Esistono strumenti di unione per il controllo del codice sorgente che comprendono il codice?
- 3. C codice sorgente libreria
- 4. //! [0] nel codice sorgente Qt
- 5. Grammatica C nel codice sorgente GCC
- 6. Codice sorgente C in documento Latex
- 7. Codice sorgente Python per operatore "in" incorporato
- 8. Ignorare il codice sorgente nel debugger
- 9. Buon browser di codice sorgente per C
- 10. dov'è il codice sorgente C++ filt?
- 11. Beautifier codice sorgente per C++ (vC++)?
- 12. Codice sorgente offuscamento
- 13. sul codice sorgente jsp
- 14. Trasforma il codice sorgente in LaTeX
- 15. plug-in jQuery per evidenziare il codice sorgente
- 16. Golang: proteggere il codice sorgente
- 17. visualizza il codice sorgente in R
- 18. Codice sorgente SDK Android
- 19. Codice sorgente Inventor App
- 20. Debug JBoss codice sorgente
- 21. SyntaxHighlighter codice sorgente v3.0.83
- 22. Eclipse: è possibile modificare il codice sorgente Java conosciuto tramite il codice sorgente "allegato"
- 23. Codice sorgente per app Android?
- 24. ClearCase per il controllo del codice sorgente?
- 25. Come indicizzare il codice sorgente con ElasticSearch
- 26. Codice sorgente Android download
- 27. Codice sorgente per l'algoritmo di Xiaolin Wu in C?
- 28. Strumenti di lettura, comprensione e lettura del codice sorgente
- 29. Codice sorgente applicazione sveglia
- 30. Unix V6 Codice sorgente
mi ricordo di una tempo in cui ho finito per compilare codice C++ pesantemente basato su modelli in assem perché il numero di classi, modelli e file era irragionevolmente alto per tuffarsi dentro per scoprire quello di cui avevo bisogno. Certo, questo non funzionerà in ogni caso. –
@Alexey Frunze Quindi, posso vedere solo il codice assembly, ma non C/C++ - codice dopo l'istanziazione dei template, è vero? – Alex
Sì e no. Se sei interessato a scoprire cosa fa esattamente il codice dietro a tutti questi strati di astrazioni, lo farai. E vedrai quali funzioni vengono chiamate e quali tipi vengono utilizzati. Quindi, anche se alcune informazioni presenti nel codice sorgente vengono perse, si può ancora vedere molto. Potresti essere interessato a abilitare e disabilitare l'ottimizzazione del codice, però. Con l'ottimizzazione troppo pesante potresti avere molte funzioni inline e quindi la struttura del codice non sarà così evidente. –