問題タブ [c++filt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 何もコンパイルせずに C++ の名前を変更できますか?
C++ では、同じ名前の関数または変数をオーバーロードできるため (異なるパラメーター、異なる名前空間、異なるテンプレート パラメーターなど)、C++ コンパイラは名前 (またはシグネチャ) を変更します。
今ではc++filt
、コンパイラ インフラストラクチャを使用せずに名前を (たとえば、標準入力から) デマングルするユーティリティを知っていて、気に入っています。しかし、逆のこと、つまり、コードをコンパイルせずに名前を変更することはできますか?
一度に 1 行ずつ、または便利な方法で、署名が標準入力に入っていると仮定します。入力には、マクロ、式、またはそのようなものが含まれていません。この質問とは異なり、コードをコンパイルしたり、コンパイラのインフラストラクチャを使用してコンパイルしたりしない回答を希望します。
c++ - c++filt は、PTX ファイル内のマングルされた名前の一部に対して十分に積極的ではありません
コンパイル済みの PTX を c++filt でフィルタリングしていますが、一部の名前/ラベルのみが取り除かれ、一部がそのまま残ります。たとえば、次のようになります。
は次のように分解されます。
少なくともこれではなく:
私は、c++filt が CUDA PTX を明示的にサポートしていないことを認識しています。ただし、デマングルされていない名前は、例のデマングルされている名前とは単に追加_param_0
など_param_1
の接尾辞が異なることに注意してください (これらの名前のプレフィックスをどのようにデマングルする必要があるかという問題もありますが、それについては忘れましょう)。
- c++filt をパラメーター名/ラベルにも適用するように強制することはできますか? より一般的には、PTX ファイル内のマングルされたすべての C++ 名に対して?
- すでに持っている「フォーマット」に加えて、CUDA「フォーマット」を認識して c++filt を拡張することは可能/簡単
[-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}]
ですか? - この場合、c++filt を使用できない、または使用に適応できない場合、デマングリングを行うにはどうすればよいですか?
c++ - ライブラリ (nm、objdump、c++filt) 内のシンボル名のデマングルに失敗しました
の出力にデマングルされていない関数があることに気付きperf script
、当初はperf
何か間違ったことをしている可能性があると考えていました。
しかし、いくつかのファイルを詳しく調べたところ、 、、および で*.so
問題を再現できました。c++filt -t
nm -C
objdump -D -C
解体プロセスで何が問題になる可能性があるかについて、私は少し迷っています。
デマングルされていないシンボルの 1 つは次のとおりです。
ライブラリは GCC 10.1 でコンパイルされています。しかし、clang 11 でコンパイルすると、同じシンボルがobjdump -D -C
.
私は今、少し行き詰まっているので、何をチェックできるかについての提案は本当にありがたいです. :)
c++ - nm と c++filter は非常に長いマングルされた c++ 名をデマングルできませんか?
C++ テンプレートのメタプログラミングを実験するとき、再帰的に定義されたテンプレート型を作成しました。これにより、再帰の深さが 4 を超え、長い名前をデマングルできない場合、型名がマングル形式 (~4600 バイト) で非常に長くnm -C
なります。c++filt
これはnm
、c++filt
デマングリングに使用される基本的なライブラリの制限または制限ですか?
編集: この質問を投稿した後、MacBook で同じことを試してみたところ、MacO、nm、および c++filt が非常に長いマングル名に対して適切に機能することがわかりました。