metashellの紹介
これはAmusementCreators AdventCalendar通称ACACの7日目の記事です。
metashellとは
C++の対話型環境です。テンプレートの展開などを追えるのでC++のTMPを学ぶのに 良いです。
導入
対応している環境は
です。
これらに当てはまるならここからインストーラーを手に入れることが出来ます。
また、対応していなくてもgithubからソースコードをダウンロードしてinstall_build_dependencies.sh
とbuild.sh
を実行すれば自前でビルドできます。
使い方
環境
#msh environment
で何がどう定義や宣言されていたり、どのファイルがインクルードされているかを知ることが出来ます。
これらの環境を一時的に保存するには
#msh environment push
してください。これによって現在の環境か変わることはありません。
その後、一段落してもとの環境に戻りたいときは
#msh environment pop
してください。pushする前の環境に戻ったと思います。
また、現在スタック上にいくつの環境があるのかは
#msh environment stack
で教えてくれます。
他にも
#msh environment reload
・・・インクルードファイルを読み直す#msh environment reset
・・・環境を初期状態に戻す(環境のスタックは変わりません)#msh environment save <path>
・・・環境をファイルに保存(metashell実行時に--enable-savingを引数に与える必要あり)
などが出来ます。
デバッグモード
#msh mdb <type>
でデバッグモードに入ります。デバッグモードになると先頭に(mdb)が表示されます。
typeは省略できて、省略した時は直前の計算に対するデバッグモードになります。
デバッグモードでは
step n
・・・でnつだけ処理を進める。step over n
ornext n
・・・現在のtemplateの階層よりも深い展開を無視してnつ分処理を進める。step out
・・・現在のtemplateの階層を抜けるrbreak <regex>
・・・正規表現にマッチした所にブレークポイントを張るcontinue
・・・ブレークポイントに引っかかるまで処理を進めるbreak list
・・・ブレークポイントのリストを表示するfinish
・・・ブレークポイントを無視して最後まで処理を進めるforwardtrace
orft
・・・これからの処理を表示するbacktrace
orbt
・・・これまでの処理を表示するhelp <command>
・・・コマンドのヘルプを見るquit
・・・デバッグモードを終了する
などができます。
そのほか
boost::mpl
のコンテナを使うときはmetashell/formatter.hpp
をインクルードしておいた方が良さそうです#msh quit
でmetashellを終了します#msh precompiled_headers on
とするとプリコンパイル済みヘッダを使えます- いちいちうるさいなぁと感じたら
#msh verbose off
にするとよいです