とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

デマングル(demangle)する秀丸マクロを書いてみた。

LLVM/Clangを試しているとC++のマングル(mangle)されたシンボル名を、デマングル(demangle)したいことが、よくあるので秀丸マクロを書いてみた。
マングルされた名前はGCCとVisualStudioに両対応してます。

動作イメージ1

動作イメージ2(複数行選択)

動作イメージ3(矩形選択)

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