Cygwin VSCode - eiichiromomma/CVMLAB GitHub Wiki
(Cygwin) VSCode
VSCode+Cygwinのgcc, gdbでデバッグする方法
ここで最後のオチとして出てくるがCygwinのgdbがバグっててブレークポイントで止まらないらしい。v11.x-v12.xとあるがv14.xでもダメだったので9.2-1にロールバックする。
setup-x86_64.exe -P gdb=9.2-1
のような感じでコマンド指定するか,setupの画面でgdbのバージョンを選択する。
VSCodeからgccなりgdbを使う際にc:\cygwin64\bin
にパスが通ってないとエラーになる。とはいえシステムで定義するとロクなことにならないので都度PATHが通った状態でVSCodeを起動する。コマンドプロンプトを起動してc:\Users\usernameに居る状態で
set PATH=%PATH%;c:\cygwin64\bin
".\AppData\Local\Programs\Microsoft VS Code\Code.exe"
のようにVSCodeを起動するプロセスだけc:\Cygwin64\binにPATHを通す。
※usernameが自分のユーザー名とする
Cygwin64ターミナルを開いて
/cygdrive/c/Users/username/AppData/Local/Programs/Microsoft\ VS\ Code/Code
でVSCodeが起動する。あとは同じ
/home/username/CP
というフォルダにゴチャっとCのソースを置く前提。
とりあえずhelloworld.cを書く
#include <stdio.h>
int main(void)
{
printf("Hello, World\n");
return 0;
}
「ターミナル」「既定のビルドタスクの構成...」を選ぶと,画面上部に「C/C++:gcc.exe アクティブなファイルのビルド コンパイラ:c:/cygwin64/bin/gcc.exe」と出るのでそれを選ぶ。
tasks.jsonの編集画面になるので
-
"args"
の"${file}"
を"${relativeFile}"
にする -
"options"
の"cwd"
を"${workspaceFolder}"
にする
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe アクティブなファイルのビルド",
"command": "C:/cygwin64/bin/gcc.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${relativeFile}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "コンパイラ: C:/cygwin64/bin/gcc.exe"
}
]
}
となる。そして保存。
再びhelloworld.cを選んだ状態で「実行」「構成の追加...」を選ぶ。 上に一覧が出るので「C++(GDB/LLDB)」を選ぶ。
ほぼ空のlaunch.jsonの編集画面になるので下記のようにする。
printfやscanfの入出力(stdin, stdout)がVSCodeのデバッガでは使えないので,externalConsole
をtrueにして別ウィンドウが開くようにするのが,検索すると出てくるサイトの内容と違う。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Cygwin Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "c:\\cygwin64\\bin\\gdb.exe",
"preLaunchTask": "C/C++: gcc.exe アクティブなファイルのビルド",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
そして保存。
※「デバッグなしで実行」を選ぶと終了時にポーズされないので,scanf等が無いと一瞬だけウィンドウが表示されて消える。(デバッグコンソールにはcode 0で終了と出てる)
他のIDE同様に行番号の左をクリックするとブレークポイントになる
- 左のアイコンから「虫▶」なのを選ぶ
- デバッグしたいC言語のソースを表示した状態にする
- 上のほうの緑色の▶アイコンを押してデバッグ開始
- 別ウィンドウが開くのでVSCodeの全画面状態は解除する
- ブレークポイントで停止するか,scanfでの入力待ちかでプログラムが停止する
- scanfの場合は別ウィンドウに値を入力,ブレークポイントの場合はウィンドウに「▶→↓↑○□」みたいなアイコン群が並ぶのでデバッグ作業ができる