SourcetrailでJNetHackのソースを眺めるための手順をメモしておく。
(これはRoguelike Advent Calendar 201916日目の記事です。)
Sourcetrailとは
Sourcetrailは、簡単に言うと、「この変数どこで使われてるのかな」とかをGUIで簡単に追いかけられるツール。C++やPython向けのコード可視化ツール「Sourcetrail」がオープンソースにとか参照。
ご存じの通り(J)NetHackのソースはすごいことになっているのでこれで追いかけやすくなるかな、と試してみたら見られるようになったので以下手順。なおNetHackのソースも同じ方法でいけるはず。
手順
環境
- JNetHackのgit版
- VisualStudio 2017 Community
- Sourcetrail_2019_4_61_Windows_64bit_Portable.zip
準備
- win/win32/vs2017/nethack.slnをダブルクリックしてVS2017を起動。
- makedefsで作成されるファイルがあるのでF8を押して一度ビルドしておく。
Sourcetail Extensionを導入
- [ツール]>[拡張機能と更新プログラム...]を選ぶ。
- 左で"オンライン"を選んで右上の検索ボックスで"sourcetrail"を入力。
- 出てきた"Sourcetail Extension"を選択してダウンロード。
- VS2017を一旦閉じるとインストールされる。
compile_commands.jsonの作成
- もう一度win/win32/vs2017/nethack.slnをダブルクリックしてVS2017を起動。
- Sourcetrail>[Create Compilation Database]を選ぶ。
- "Create Compilation Database"ダイアログ:
- 全てのプロジェクトを選択。
- Directoryはお好みで。
- [Create]を押す。
- 作成後Sourcetrailを起動するか聞かれるけれどもここでは[Finish]を押しておく。
compile_commands.jsonの修正
出来たファイルから"/Gs /Oi-"という文字列を全部削除する。これが残っているとエラーが山ほど出て見にくくなる。
Perlならこんな感じ: perl -pi -e 's{/Gs /Oi-}{}' compile_commands.json
もちろんお好みのエディタで開いてこの文字列を削除してもOK。
Sourcetrailでの作業
- Sourcetrail.exeを起動。
- [New Project]を押す。
- "Project Name"と"Project Location"はお好みで。
- [Add Source Group]を押す。
- "C/C++ from Compilation Database"を選んで[Next]。
- "NEW SOURCE GROUP"ダイアログ:
- "Compilation Database"はさっき修正したcompile_commands.jsonを指定。
- [Select from Compilation Database]を押す。
- システムフォルダとJNH関連フォルダが表示されるのでJNH関連フォルダを全部チェックして[Save]。
- [Next]を押す。
- さらに[Next]を押す。
- "New Project"画面に戻ってくるので[Create]を押す。
- "Start Indexing"画面になるので"All Files"を選んで[Start]を押す。
- [Edit]>[Preferences]を選ぶ。
- "Text Encoding"で"Shift_JIS"を選んで[Save]を押す。
- 完成。
文字コード関係でちょっとエラーが出たりするけどまあまあ動いているのでそれ以上追求はしていない。実行するわけではないので先にソースコードをUTF-8に変換してしまっても良いのかもしれない。
まとめ
個人的には気になった変数の使用場所とかを簡単に見られるようになったので色々はかどりそう。*bandとかのソースにも多分適用できると思うのでぜひ。