C++のソースコードをC/C++のソースコードに変換するツールはありますが、インスタンス化された(展開されていない)テンプレートはありますか? これは、明白な理解のために、どのコードのC++テンプレートを変換するために必要です。 IDE(MSVS、QtCreator、...)またはコンパイラ(ICC、GCC、MSVC、Clang)に存在する可能性がありますか?C++のソースコードをC/C++のソースコードに変換するツールはありますが、インスタンス化された(展開されていない)テンプレートはありますか?
6
A
答えて
4
これは出回っへのアレクセイ・フルンゼからSO
- Debugging template instantiations
- link 2
- link 3(あまりにも素敵な紙で)
- How do you debug heavily templated code in c++?
アイデア/原則に答えたようです逆アセンブルされたコードを使用すると、一緒にかなり良いです単純化されたテンプレートを使用すると、それが何をするのかを正確に理解する良い機会があります。
編集1 コンパイラは
- 使用行っていた事柄の理解を得るためにどのようにいくつかの他の可能性があります。アセンブリを取得し、ツール
c++filt
(その一部を使用するgcc -S -O1 {yourcode.cpp}
は、 binutilsのあなたはC-コード - 使用して、より快適に感じる場合はC-コードに解体を変換する:
g++ -fdump-tree-original file.cpp
wはMSVC++デバッガを使用して、いくつかの(擬似)C++コード - を取得します最後instatiation後にブレークポイントi番目とinstatiatedテンプレート
- 利用のパラメータであり、すべてのタイプと値を参照してください。コンパイラはinstatiatedとテンプレートにあなたを最適化する方法を知っているためにインスタンス化テンプレートを使用してXMLを生成するためのGCC XML(FAQ)
- をLLVM IRを取得し、
- コモC++はCのコードにC++を「コンパイル」することができますテキストに変換する
llvm-dis
を使用する-emit-llvm
が、今コンパイラはもう
1
インスタンス化またはそのパラメータの中に意図的なエラーを置いて問題を回避すると、コンパイラ(適切なバージョン:gcc 4.8、clangなど)を次の行に沿って出力できます。テンプレートXXXはA = int、B = float、..でインスタンス化されています。 "
関連する問題
- 1. c/C++のソースコードをhtmlに変換するツールはありますか?
- 2. 「バンドルされた」MeteorJsソースコードを通常のソースコードに変換する方法はありますか?
- 3. WPFでActive Xコントロールがホストされているソースコードはありますか?
- 4. Android SDKのlayoutoptツールのソースコードはどこにありますか?
- 5. FPGAのソースコードはありますか?
- 6. Javaソースコードにテストケースがありますか?
- 7. AWSソースコードにエラーがありますか?
- 8. Libgdx HTMLプロジェクトがコンパイルされていません(ソースコードがありません...)
- 9. Google App Engineで実行される無料のWikiソースコードはありますか?
- 10. webpackバンドルjsファイルをソースコードtsに変換する方法はありますか?
- 11. 公開時にソースコードはどれくらい保護されていますか?
- 12. MacにC/C++のソースコードをフォーマットするソフトウェアはありますか?
- 13. なぜSpringのソースコードはリンクリストをあまり使用していますか
- 14. AppleのReachabilityソースコードに重いバグがありますか? (reachabilityForLocalWiFi)
- 15. mvcフレームワークで開発された、ダウンロードするソースコードを持つプロジェクトはありますか?
- 16. 難読化されたソースコードで海賊版を模擬する方法はありますか?
- 17. Coq証明言語に「それ以上の副目標はありませんが、インスタンス化されていない実在変数がありますか?
- 18. リリースされたJavaソースコードにエラーがあるのはなぜですか?
- 19. アンドロイドフォトアプリのソースコードを表示する方法はありますか?
- 20. .Netのソースコードを保護するフリーソフトウェアはありますか?
- 21. 公開されているSAML IDプロバイダはありますか?
- 22. JavaScriptでは、指定されたURLのソースコードを取得する方法はありますか?
- 23. なぜソースコードはapp/resources/tmp/cacheフォルダにありますか?
- 24. Node.jsデスクトップアプリケーションのソースコードは保護されていますか?
- 25. プログラムでインスタンス化されたオブジェクトthatsクラスにはSpringのライフサイクルアノテーションがあります
- 26. ソースコードはどこにインストールされていますか(Google Cloud Platform)
- 27. Mvvmcrossでのバインディングは、オブジェクトがインスタンス化される必要がありますか?
- 28. 展開されたwar(tomcat)にSpingBootログファイルがありません
- 29. 展開されたサーバーにJSフォルダがありません
- 30. IDLディレクトリに含まれるソースコードはどこにありますか?
維持されていない私は1つを覚えている:クランを使用することができます私がひどくテンプレートのC++コードをコンパイルしてしまった時クラス、テンプレート、ファイルの数が私が必要としているものを見つけ出すために不当に高い水準に達していたからです。もちろん、これはすべての場合に機能しません。 –
@Alexey Frunzeだから、私はアセンブリコードしか見ることができませんが、C/C++ではなく、テンプレートのインスタンス化後のコードは本当ですか? – Alex
はい、いいえ。コードが抽象レイヤのすべての背後にあることを知りたいのであれば、あなたはそうするでしょう。関数が呼び出され、使用される型が分かります。したがって、ソースコードにある情報の一部が失われても、かなり多くの情報が表示されます。ただし、コードの最適化を有効または無効にすることに興味があるかもしれません。あまりにも重い最適化を行うと、多くの関数がインライン展開され、コード構造が明らかにならないことがあります。 –