デマングル(demangle)する秀丸マクロを書いてみた。
LLVM/Clangを試しているとC++のマングル(mangle)されたシンボル名を、デマングル(demangle)したいことが、よくあるので秀丸マクロを書いてみた。
マングルされた名前はGCCとVisualStudioに両対応してます。
demangleする一般的なやり方
demangleするには、GNU Binary Utilities に含まれる c++filt を使うのが常套手段のようです。
しかしながら自分の環境ではうまくdemangleしてくれなかったので下記ソースコードをVisualStudioへ移植しました。
- cp-demangle.cpp
- cp-demangle.h
- demangle.h
ついでと言っては何ですが、GCCだけでなくVisualStudioのシンボル名もdemangle出来るようにしました。
VCのほうはWindows-APIのUnDecorateSymbolName関数を呼んでいるだけです。
マクロの内部動作
秀丸マクロ側でデマングルするシンボル名を適当な正規表現でかき集めて、デマングルする実行ファイル(demangle.exe)を呼び出しています。
デマングルされた名前は標準出力に出力するので、それを秀丸エディタのアウトプット枠に取り込んでいます。
demangle.exe
>demangle.exe _ZN9wikipedia7article6formatEv ?Fv_Ul@@YAKXZ ?Fxx_i@@YAHP6AHH@Z0@Z wikipedia::article::format() unsigned long __cdecl Fv_Ul(void) int __cdecl Fxx_i(int (__cdecl*)(int),int (__cdecl*)(int))
引数に与えるマングルされた名前はGCCとVCが混在しても良いです。具体的な内容はソースコードのコメントを参照して下さい。
ソースコード(Github)
https://github.com/ohtorii/demangle
導入方法は下記2ファイルを秀丸エディタのスクリプトフォルダへコピーするだけです。
- demangle.exe
- demangle.mac
demangle.mac を適当なキーボードショートカットに割り当てて下さい。
License
GNU General Public License