LLDBでデバッグする
前回までのセットアップで、Visual Studio CodeでCのソースコードがビルドできるようになった。さらに便利な状況にセットアップできるのだが、まずは先に基本的な機能をすべて整えてしまそう。次はVisual Studio CodeでLLDBを使ったデバッグができるように設定する。
LLDBはLLVMプロジェクトの一環として開発されているデバッガだ。CコンパイラとしてLLVM/Clangを使う際に、デバッガとしてLLDBを使うというのは相性がよい。複数のプラットフォームで動作し、Visual Studio Codeから使えることはもちろん、CUIコマンドで使うこともできる。
Visual Studio CodeでLLDBを使う方法はいくつかあるが、最も簡単なのは「CodeLLDB」と呼ばれるVisual Studio Codeのエクステンションを使う方法だ。LLVMパッケージでインストールされるlldbコマンドを使えるようにするのは手間がかかるので、ここでは、CodeLLDBエクステンションに含まれているlldbを使う方法を取り上げておこう。
Pythonをインストール
CodeLLDBを使うにはPythonが必要になるので、まずPythonのインストールを行う。Windows版のPythonは、次のページからダウンロードできる。
ダウンロードページの上部に「Latest Python Release」といったリンクがあるので、ここで最新のリリース版を調べ、そのバージョンをインストールする。ほとんどの場合「Windows installer (64-bit)」をダウンロードすればよい。
ダウンロードしたインストーラを実行する時は、インストーラの最初の画面で、次のように「Add Python 3.9 to PATH」のチェックを入れるのを忘れないようにする。
PATHに追加するチェックを忘れた場合は、いったんアンインストールしてからもう一度インストールするか、インストール後に手動で環境変数PATHを編集してPythonのパスを追加する。手間なので、忘れた場合はアンインストールしてからチェックを入れてインストールしたほうがラクだろう。
CodeLLDBエクステンションをインストール
Pythonをインストールしたら、Visual Studio Codeで「CodeLLDBエクステンション」をインストールする。Visual Studio Codeの左端になるエクステンションのアイコンをクリックし、エクステンションとして「CodeLLDB」を検索、表示されるリストからCodeLLDBを選択し、「Install」ボタンをクリックする。
CodeLLDBのインストールで、特に手間取ることはないはずだ。
設定ファイルの作成と更新
続いて、デバッガとしてLLDBが機能するように設定ファイルを作成する。デバッガを起動するショートカットキーは「F5」だ。このキーはよく使うので覚えてしまおう。何も設定していない状態で「F5」を押すと、次のように設定が行われていないことを示すダイアログが表示される。このダイアログの「OK」ボタンを押す。
すると、次のような内容でlaunch.jsonという設定ファイルが作成される。
このファイルの内容を次のように書き換える。ファイルの保存は「Ctrl」+「S」だ。
編集後のlaunch.jsonファイル
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
次に、先日作成したビルド用の設定ファイルであるtasks.jsonファイルも書き換える。現状は次のようになっているはずだ。
このファイルを次のように書き換える。
編集後のtasks.jsonファイル
{
"version": "2.0.0",
"tasks": [
{
"label": "Clang",
"type": "process",
"command": "clang.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
前回は、MicrosoftのCコンパイラとの互換性を考慮したclang-clを指定していたが、これを本来のclangへ変更したほか、デバッグ用のバイナリを生成するように-gオプションを追加してある。デバッガを使うには、デバッガ用にバイナリを生成する必要があるのだ。これでデバッガを使う準備は完了だ。
LLDBデバッガの動作を確認する
hello.cファイルをビルドしてデバッガの動作を確認しよう。まず、新しい設定でhello.cをビルドする(「Ctrl」+「Shift」+「B」)。
ビルドしたら、hello.cの6行目にブレークポイントを設定する。行番号の左側をクリックするとブレークポイントが設定される。
この状態で、「F5」を押してデバッグを開始する。
次のように、設定したブレークポイントで動作が一時停止すればLLDBは動作している。
ステップを実行すると、次のようにコードを追っていくことを確認できる。
ブレークポイントを設定したにもかかわらず、ブレークポイントで動作が停止しない場合は、Pythonがインストールされていないか、またはPythonがインストールされていてもPATHに追加されていない可能性がある。Pythonがインストールされていて、かつ、PATHに追加されているかを確認しよう。
デバッガが使えるととにかく便利
デバッガはC/C++開発を行う上で強力なツールとして機能してくれる。簡単なデバッグであれば使わなくてもいいかもしれないが、入り組んでくるとデバッガの活用は欠かせない。ClangとLLDBは組み合わせとしては比較的モダンだ。多くのプラットフォームで使えるし、開発も活発に進められている。ぜひツールとして使いこなしていきたいところである。