web-dev-qa-db-ja.com

C ++のオンライン名デマングラーはありますか?

私はかなり長くて紛らわしいリンクエラーを受け取っています。それをいくつかのウェブサイトのテキストボックスに貼り付けて、名前を混乱させないようにしてください。

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

102
Roman Starkov

このようなオンラインサービスを作成しました: http://demangler.com

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

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

124
Rafael Baptista

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

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

103
nattofriends

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

あなたがマウスクリックでそれをしたい場合...それのためのGUIをよく書いてください;)

22
Dummy00001

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

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

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

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)
           ^^^^^^^^^^^
6
Shafik Yaghmour

参考までに、Ruby Borland/MS /マングルされた名前を解読するためのgem: nmangler

1
zed_0xff