C ++用のオンライン名デマングラはありますか?[閉まっている]


109

かなり長くて紛らわしいリンクエラーが発生します。Webサイトのテキストボックスに貼り付けて、名前を壊さないようにしておけば、それが気に入ります。

誰かがそのようなサービスを知っていますか?


3
ところで、コンパイラは何ですか?たぶん、あなたはそれと一緒に出荷された準備ができたツールを使うことができるだけです。
シャープトゥース

4
私は「undname.exe」を見つけて、それはVC ++の仕事をしました。
Roman Starkov

3
ここにあなたの名前を貼り付けてください。それがVC2005の名前であれば、私はそれを壊します。
xtofl

回答:


133

私はそのようなオンラインサービスを作成しました。 https://demangler.com

これはgcc c ++シンボルデマングラです。スタックトレースまたはnmの出力をテキストボックスにコピーするだけで、デマングルされた名前の出力が返されます。

@Update:MSVCシンボルとJavaシンボルもデマングルします。


これは私にとってはうまくいきましたが、より一般的な答えではうまくいきませんでした:_ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu

デマングラは、Itaniumのref修飾子をデマングルできません。Clangによって生成された_ZNR4test1fEvを見ています。
子犬、

ありがとう、素敵なサイト!white-space: normalresponseSection <pre>タグに追加または同様にしてください(そしておそらく行番号を追加してください)。長い1行の出力は現在読むことができません。
jplatte 14年

1
あなたは気をつけるべきです。デマングラの実際の実装のほとんどは、恐ろしくバグが多く、安全ではありません。基本的に、同じプラットフォームで生成されたマングルされた名前でのみ機能しますが、非常に複雑になるか、一般的な入力でメモリエラーがフラットになる可能性があります。
Kerrek SB 2017

8
愛用しています。それはダウンしているように見えますが、それはとても素敵で便利なページ
でした

104

これは少し遅いかもしれませんが、この質問に基づいて作成しました。私が試した入力で動作し、Emscriptenを介してJavascriptにコンパイルされた__cxa_demangleと__unDNameを介してg ++とmsvc ++をサポートします。これが誰かを助けることを願っています:c ++ filtjs

編集:エスケープの問題を修正


6
驚くばかり!ありがとうございました!おそらく、ページのどこかに「オンラインC ++の名前のデマングラ」と記載して、他のユーザーがGoogle経由であなたを見つけられるようにしますか?
ロマン・スターコフ2012年

1
さて、今すぐ修正する必要があります。
納豆フレンズ2013年

3
@Zibri:「スモールCソース」はオンラインではありません。そのためには、既存のc ++ filtおよびundnameユーティリティを使用します。
納豆の友人

1
@nattofriends:ツールがブラケットをエスケープしていないようです??_R3?$KxSet@V?$KxSpe@DI@@I@@8。を参照してください。
Mooing Duck、2013

2
他の人が言及したテンプレートを使用して問題を修正できれば非常に役立ちます。これにより、SO で少なくとも1つの疑わしい質問が発生しました。
Shafik Yaghmour 2014年

24

ほとんどの(すべてではないにせよ)C ++コンパイラーには、c++filt明らかに探していることを正確に実行するツールが付属しています。

マウスをクリックしたい場合は、GUIを作成してください;)


マウスをクリックするのではなく、最小限の労力でそれを望みます:)まあ、とにかくそれはあまり必要ありません。
Roman Starkov

3
私のc ++ filtの通常の使用例はobjdump -dr ./AClass.o | c++filt | less(逆アセンブラ)またはnm ./AClass.o | c++filt | less(オブジェクトファイル内のシンボルのリスト)
Dummy00001

2
ほとんどのコンパイラはGCCではありません。GCC以外のコンパイラは、c ++ filtを同梱していません。誘導により、ほとんどのコンパイラはc ++ filtを出荷しません。
IInspectable

9

2つのコピーアンドペーストのオンラインソリューションがあります。

GCCとClangのサポートのみが必要な場合は、おそらく最も用途の広いオンラインC ++コンパイラーであるColiruを使用することもできます。

これは、切り取り、貼り付け、クリックほど単純ではありませんが、それほど難しくはありません。また、前述のように、テンプレートパラメーターに問題はないようです。コマンドラインを変更して、次のようなものを実行する必要があります。

cat main.cpp | c++filt -t

解読する次のを使って、ライブでご覧ください

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_

に:

void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
           ^^^^^^^^^^^

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.