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 以下にインストールされる).サイドメニューの (拡張機能のアイコン) を選択してから検索してインストールする.
- Japanese Language Pack for Visual Studio Code : メニューなどを日本語化する.
- C/C++ : C言語,C++言語のIntelliSense
- C/C++ Extension Pack: C/C++ の拡張
- CodeLLDB: デバッガlldbの利用
デバッガ自体は 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 が開く.
ほぼデフォルトで問題ないが,
- ~/mis/cpp 以下に課題用のフォルダーを作成したときに,そのフォルダー内で実行ファイルを作成してデバッグするため,"program" を"${fileDirname}/${fileBasenameNoExtension}"
,
- "preLaunchTask" として,コンパイルをおこなうタスクを設定しておくと,デバッグ前にコンパイルするようになる
に対応した以下のファイルと置き換えると楽.
{
// 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) を設定する.行番号の左側をクリックすると,その行にブレークポイントが設定され,赤い丸が表示される.
メニューバーの「ファイル」->「デバッグの開始」を選択するとデバッガが動くが,ブレークポイントの行の実行前の状態で停止する.その状態での変数やコールスタックなどが参照できる.
デバッガ実行中に,ウィンドウ上のツールバーで操作ができる.
- 続行: 次のブレークポイントまで実行
- ステップオーバー: 現在の関数の次の行まで実行
- ステップイン: 現在の行を実行するが,関数呼び出しがあったら,その関数の中に入る
- ステップアウト: 現在の関数の終了まで実行
- 再起動: 初めから実行
- 停止: デバッガ終了