ECCS端末macOS環境でのVisual Studio Codeの利用

ECCS端末macOS環境でC++言語環境を利用するには,XCode, emacs, vim でも良いが,現在利用者が多い VSCode (Visual Studio Code) を利用した C++ 言語のデバッグについて説明する.

授業用ファイルの展開

授業用のディレクトリをターミナルから作成する.ここでは,ホームディレクトリの下に mis2 という名前のディレクトリを作成することを想定している.
        mkdir ~/mis2
        
配布プログラムをダウンロードし,展開する.
        cd ~/mis2
        curl -O https://lecture.ecc.u-tokyo.ac.jp/~ktanaka/mis2-2023/ods-cpp.tgz
        tar xf ods-cpp.tgz
        
これで,~/mis2/cpp 以下に配布プログラムが展開される.

VSCodeの起動

ECCS端末のmacOS環境ではVSCodeが初めから /Applications 以下にインストールされている.Finder  を起動して,サイドメニューの「アプリケーション」を選んで,「Visual Studio Code」を探して起動する.

ドックに登録しておくと次回からの起動が楽になる.

拡張機能のインストール

起動後には以下のいくつかの拡張機能をインストールすることをおすすめする (拡張機能は ~/.vscode 以下にインストールされる).サイドメニューの (拡張機能のアイコン) を選択してから検索してインストールする. デバッガ自体は C/C++ インストールのみでも利用可能だが,ここでは CodeLLDB の利用をしてみる(VSCodeでMacOSにC言語デバッグ環境を構築の内容を参考にしています).

ECCS端末のmacOS環境では,~/.vscode 以下にインストールされたファイルの実行のアクセス権限が足りなくて,拡張機能が正常に動かないことがあります.拡張機能のインストール後に,ターミナルから以下のコマンドを実行してください.その後,一度再起動すると有効になるようです.

chmod og+x ~
find ~/.vscode -d -print0 | xargs -0 chmod og+rX
find ~/.vscode -type f -perm +111 -print0 | xargs -0 chmod og+rX
        

Japanese Language Pack for Visual Studio Codeをインストールすると,直後に以下のダイアログが出るので,restartする.

デバッグ

VSCodeのメニューバーの「ファイル」->「フォルダーを開く」で ~/mis2/cpp を開いてみる.

すると,フォルダーの作者を信用するかどうか,ダイアログウィンドウが出るので,ods-cpp.tgz を作成した田中を信用できるなら信用する.

最初は,サイドメニューの EXPLORERが選ばれた状態になっている.ここで,~/mis2/cpp 以下のファイルが表示されているので,vector_speed.cpp を選ぶ (._で始まるファイルが見えるので混乱するかもしれないが,これは,NFS上でmacOS用の属性を保持するためのファイルなので ._ で始まらないファイルを選ぶ).

この vector_speed.cpp をデバッグすることを試みる.メニューバーの「ファイル」->「デバッグの開始」を選択する.

デバッガーの選択画面になる.CodeLLDBを利用するので,「LLDB」を選択する.

launch configurationがおこなわれていないという警告のダイアログが出るので「OK」を選択する.すると,このディレクトリの下に .vscode というディレクトリが作成され,設定ファイル launch.json が開く.

ほぼデフォルトで問題ないが, に対応した以下のファイルと置き換えると楽.
            {
                // IntelliSense を使用して利用可能な属性を学べます。
                // 既存の属性の説明をホバーして表示します。
                // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
                "version": "0.2.0",
                "configurations": [
                    {
                        "name": "c_debug",
                        "type": "lldb",
                        "request": "launch",
                        "program": "${fileDirname}/${fileBasenameNoExtension}",
                        "args": [],
                        "cwd": "${fileDirname}",
                        "preLaunchTask": "c_build",
                    }
                ]
            }            
        
次に,コンパイルタスクのための設定ファイル tasks.json をlaunch.json と同じ ~/mis2/cpp/.vscode に作成する. vscodeのサイドメニューの「エクスプローラー」のタブで,.vscode の行を右ボタンで選択して,「新しいファイル」を選択する.

ファイル名「tasks.json」を選択すると,tasks.json の編集画面になる.

以下の内容をコピーする.
        {
            {
                // tasks.json 形式の詳細についての資料は、
                // https://go.microsoft.com/fwlink/?LinkId=733558 をご覧ください
                "version": "2.0.0",
                "tasks": [
                    {
                        "type": "shell",
                        "label": "c_build",
                        "command": "g++",
                        "args": [
                            "-g",
                            "${file}",
                            "-o",
                            "${fileDirname}/${fileBasenameNoExtension}"
                        ],
                        "group": "build",
                    }
                ]
            }
        }
        
このあとは,メニューバーの「ファイル」->「デバッグの開始」を選択するとデバッガが動く.ログイン後に最初に動かすときは,以下のダイアログが出るので,ログインアカウントのパスワード (UTokyo Accountのパスワード)を入力して「続ける」を選択する.

時々,ヘルパーツールの追加を求める以下のダイアログが出ることがあるが,これはキャンセルを選択する.

かんたんなデバッガの使い方

実行前にブレークポイント (Break Point) を設定する.行番号の左側をクリックすると,その行にブレークポイントが設定され,赤い丸が表示される.

メニューバーの「ファイル」->「デバッグの開始」を選択するとデバッガが動くが,ブレークポイントの行の実行前の状態で停止する.その状態での変数やコールスタックなどが参照できる.

デバッガ実行中に,ウィンドウ上のツールバーで操作ができる.