動機
- 講義で使用予定のVisual Studio Code 1.49.1 + C/C++ 機能拡張 1.0.0 + msys2(20200903)環境でのgdbによるデバッグがある日突然エラーで動かない問題に遭遇.
- いずれ本家で対処される問題かもしれないし,対処されないかもしれないし,そもそも自分の環境がおかしい可能性もある.
- めんどいのでclang + lldbで行くことにした.
- 主に学生さん向けの情報です.一般的に価値があるかは読む人次第.
- (2021/4/6追記)上記問題が解決されているようなのでgccとgdbを使う場合についても書いた.
注意
- ウイルスバスター,マカフィーインターネットセキュリティ,ノートンなどのセキュリティソフトを無効化しておく.特に,ファイル保護,リアルタイムスキャンなどの機能は必ずOFFに.ウイルスバスターのように監視対象のフォルダの例外設定が可能な場合,
C:\tools
フォルダを例外に設定しておきます.Cドライブ直下にtools
フォルダがないと設定できない場合には,自分で作成しておく. - Windowsのログオンユーザ名が半角英数字だけであることを確認すること.
- 32bit版OSは対象外です.これを機に64bit版OSにすることを推奨します.
0. お約束
- 「エクスプローラー」とは,Windowsのファイルマネージャソフトです.スタートメニュー -> Windowsシステムツールの中にあります.
- Cドライブとは,エクスプローラの左ペインにある「PC」を展開したときに現れる,
〜適当な名前(Windowsとかローカルディスクとか)〜(C:)
という名前のディスクです.通常,Windowsはここにインストールされています. - キーボードショートカットは「Ctrl + Shift + X」などと記述します.意味は「CtrlキーとShiftキーを押しながら,Xキーを押」すということです.
1. chocolateyのインストール
-
スタートメニュー -> Windows PowerShell -> 「Windows PowerShell」アイコンを右クリックし,「管理者として実行」をクリックし,「管理者: Windows PowerShell」ウインドウを開く.「このアプリが〜許可しますか」の質問には当然だが「はい」と答えます.コマンドの入力を待っている状態では,カーソルが点滅しているのが分かる.
-
以下のコマンドをコピーし(コマンドの上にマウスカーソルを移動し,出てくるコピーボタンをクリック),1-1.で開いたウインドウにペースト(Ctrl + V)し,Enterキーを押す.
-
赤い文字のエラー表示が出ずに,カーソルが点滅する入力待ち状態になればインストール終了.ウインドウを閉じます.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
2. 環境変数の設定
-
手順1-1をを繰り返して,「管理者: Windows PowerShell」ウインドウを開く.
-
以下のコマンドをコピー&ペーストし,Enterキーを押す.
setx PATH "$env:path;C:\tools\msys64\mingw64\bin"
- 以下のコマンドをコピー&ペーストし,Enterキーを押す.
setx PATH "$env:path;C:\tools\msys64\usr\bin"
PowerShellのウインドウは閉じても大丈夫です.
3. msys2のインストール
-
1-1の手順を繰り返して,「管理者: Windows PowerShell」ウインドウを開く.
-
以下のコマンドを手順1-2と同様にコピー&ペーストしてEnterキーを押す.途中英文の質問が表示される場合にはAと入力してEnterキーを押します.**回線速度や,サーバの混雑度によって時間がかかりますが,途中で終了しないように.**以下のスクリーンショットのように,入力待ち状態になるまでに,赤い文字が表示されなければ終了(ただし,一瞬赤字が表示されることがあります.これは無視しても大丈夫です.).セキュリティソフトが動いているとこの手順で失敗します.
choco install msys2 -y
4. msys2のターミナルを開く
-
1-1の手順を繰り返して,「管理者: Windows PowerShell」ウインドウを開く.
-
以下のコマンドを入力しEnterキーを押す.msys2のターミナルが開きます.
C:\tools\msys64\mingw64.exe
(2023-03-23追記)キーリングをアップデートします.
pacman -Sy msys2-keyring && pacman -Su
5. コンパイラとデバッガのインストール
Visual Studio Codeそれ自体には,C/C++言語のコンパイラは含まれていませんので,別途インストールします.ここで,コンパイラとデバッガ(デバッグ作業を行うためのソフトウェア)の選択肢が2つあります.どちらを選んでも基本的な機能は変わりません.gccとgdbの組み合わせのほうが,Pythonをインストールするという工程がない分,簡単かもしれません.
5.1 gcc
とgdb
を使う場合
5.1.1 gcc
とgdb
のインストール
手順3-2で開いたmsys2のターミナルにて,以下のコマンドをコピー&ペーストして,Enterキーを押す.**ただし,ペーストするには,msys2のターミナルウインドウ上で右クリックを押し,表示されるコンテキストメニューから「Paste」をクリックします.**途中,「インストールしますか?」などの質問が表示された場合には,そのままEnterキーを押してください.ダウンロードとインストールには,それなりの時間(サーバが混んでいるときには1時間以上)がかかります.
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb mingw-w64-x86_64-cmake make git
vscodeをインストール&設定する場合のみ手順6につづく
5.2 clang
とlldb
を使う場合
5.2.1 clang
とlldb
のインストール
手順3-2で開いたmsys2のターミナルにて,以下のコマンドをコピー&ペーストして,Enterキーを押す.**ただし,ペーストするには,msys2のターミナルウインドウ上で右クリックを押し,表示されるコンテキストメニューから「Paste」をクリックします.**途中,「インストールしますか?」などの質問が表示された場合には,そのままEnterキーを押してください.ダウンロードとインストールには,それなりの時間(サーバが混んでいるときには1時間以上)がかかります.待っている間に次の手順を実行しても構いません.インストール完了時には以下のスクリーンショットと同じ表示になるはずです.
pacman -S mingw-w64-x86_64-clang mingw-w64-x86_64-lldb
5.2.2 Pythonのインストール
-
https://www.python.org/ftp/python/3.8.6/python-3.8.6rc1-amd64.exe を例えば「ダウンロード」フォルダにダウンロードします.ダウンロードしたインストーラをダブルクリックして実行します.
-
以下のスクリーンショットにしたがって,インストール作業を進めます.
6. Visual Studio Codeのインストール
-
1-1の手順を繰り返して,「管理者: Windows PowerShell」ウインドウを開く.
-
以下のコマンドをコピー&ペーストし,Enterキーを押す.しばらくすると,デスクトップにVisual Studio Codeのショートカットが見えるはず.見えたら完了.参考までに完了時のPowerShellウインドウの表示は以下のスクリーンショット参照.
choco install vscode -y
7. Visual Studio Codeの設定1
-
エクスプローラーを開き,Alt + Dを押す.Backspaceキーを押し続け,見えている文字を消す.そこに,
C:\Users
と入力してEnterキーを押す.表示されたフォルダから,自分のユーザ名をフォルダを探して,ダブルクリックする.さらに「ドキュメント」あるいは「Documents」フォルダを探し,ダブルクリックする.そこに新しいフォルダ「Progs」(名前は講義によって違う可能性がある)を作成する.すでにProgsフォルダが存在する場合,既存のフォルダの名前を「Progs_old」などに変更しておく. -
デスクトップのVisual Studio Codeのショートカットをダブルクリックして,vscodeを起動する.
-
Ctrl + Shift + X を入力し,
japanese
とタイプする.一番上位の候補「Japanese Language Pack for〜」の右下に見える緑色のInstall
ボタンを押す. -
タイプした
japanese
を消して,C/C++
とタイプ.一番上位の候補「C/C++」の右下に見える緑色のInstall
ボタンを押す. -
(この手順は4.2 clangとlldbを使う場合を選択した場合のみ必要)タイプした
C/C++
を消して,CodeLLDB
とタイプ.唯一の候補「CodeLLDB」の右下に見える緑色のInstall
ボタンを押す.インストールには少し時間がかかる. -
vscodeウインドウの右下に
In order to use VS Code in Japanese, VS Code needs to restart
が見えているはず.Restart Now
ボタンを押す. -
Ctrl + K + Oを押し,手順7-1で作成したフォルダを開く.
-
Ctrl + Nを押し,新しいファイル作成する.
Untitled-1
という新しいファイルが開く.Ctrl + Sを押し,新しいファイルをtest.c
という名前で保存する. -
以下のコードをコピーし,
test.c
にペーストする.Ctrl + Sを押して保存.一度vscodeを閉じる.
#include <stdio.h>
int main() {
int a = 10;
printf("a = %d\n", a);
}
8. Visual Studio Codeの設定2(tasks.jsonの生成)
-
vscodeを起動.Ctrl + Sfhit + Pを押す.
edit config
と入力し,候補の「C/C++: 構成の編集(UI)」をクリック. -
「コンパイラパス」にあるドロップダウンリストを展開し,候補の中から
C:/tools/msys64/mingw64/bin/clang.exe
を選択. -
下に少しスクロールし,IntelliSenseモードのドロップダウンリストを展開し,候補の中から
clang-x64
を選択. -
test.c
ファイルのタブに移動し,Ctrl + Shift + Bを押す.画面中央上部に出てくる候補の中から,C/C++: clang.exe build active file
はクリックせず,にマウスカーソルをあわせ,右側に表示される歯車アイコンをクリックする.tasks.json
ファイルが自動作成される.自動作成された内容を,以下の内容と置き換える.コンパイラとデバッガの選択で5.1と5.2のどちらを選択したかで置き換えるべきtasks.jsonの内容が変わるので注意.
「5.1 gccとgdb」を選択した場合
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: gcc.exe build active file",
"command": "C:/tools/msys64/mingw64/bin/g++.exe",
"args": [
"-g",
"-fexec-charset=CP932",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:/tools/msys64/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
「5.2 clangとlldb」を選択した場合
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: clang.exe build active file",
"command": "C:/tools/msys64/mingw64/bin/clang.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:/tools/msys64/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
9. Visual Studio Codeの設定3(launch.jsonの作成)
-
test.c
ファイルのタブに移動し,F5キーを押すか,メニューの「実行」->「デバッグの開始」を選択.「環境の選択」候補の中のLLDB
を選択.Cannot start debugging because no launch configuration has been provided
エラーが出るが,気にせずOKを押す. -
launch.json
ファイルが開く.その中身を以下のコードと置き換える.(Ctrl + Aを押した後,Backspaceキーを押して全て削除し,コピー&ペースト)
「5.1 gccとgdb」を選択した場合
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 起動",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "c:\\tools\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "gdb の再フォーマットを有効にする",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc.exe build active file"
}
]
}
「5.2 clangとlldb」を選択した場合
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"cwd": "${workspaceFolder}",
"preLaunchTask": "C/C++: clang.exe build active file"
}
]
}
10. ブレークポイントとデバッグ実行
-
test.c
ファイルが表示されているタブに移動する.なお,その他のタブは閉じてしまって構いません. -
ソースコードの5行目をクリックした後,Shift + F9キーを押すか,行番号の左側をクリックして赤い丸を点灯させる.この作業はブレークポイントを設定しています.ブレークポイントとは,プログラムの実行を一時停止する場所のことです.デバッガを用いた実行では,ブレークポイントのついた行を実行する直前で,プログラムの実行が止まります.このとき,ローカル変数などの値を確認することができます.
-
F5キーを押すか,メニューの「実行」->「デバッグの開始」を選択.5行目でプログラムの実行が一時停止したらOKです.
-
Shift + F5キーを押すか,メニューの「実行」->「デバッグの停止」を選択して終了.
以上.