Cygwin VSCode - eiichiromomma/CVMLAB GitHub Wiki

(Cygwin) VSCode

VSCode+Cygwinのgcc, gdbでデバッグする方法

gdbを9.2-1にする

ここで最後のオチとして出てくるがCygwinのgdbがバグっててブレークポイントで止まらないらしい。v11.x-v12.xとあるがv14.xでもダメだったので9.2-1にロールバックする。

setup-x86_64.exe -P gdb=9.2-1

のような感じでコマンド指定するか,setupの画面でgdbのバージョンを選択する。

CygwinにPATHを通す

方法1 正攻法

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を通す。

方法2 Cygwin64ターミナルからVSCodeを起動する

※usernameが自分のユーザー名とする

Cygwin64ターミナルを開いて

/cygdrive/c/Users/username/AppData/Local/Programs/Microsoft\ VS\ Code/Code

でVSCodeが起動する。あとは同じ

以降の説明の作業動画

ここから先の作業のダダ流し

ワークスペースへのtasks.jsonとlaunch.jsonの設定

/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同様に行番号の左をクリックするとブレークポイントになる

  1. 左のアイコンから「虫▶」なのを選ぶ
  2. デバッグしたいC言語のソースを表示した状態にする
  3. 上のほうの緑色の▶アイコンを押してデバッグ開始
  4. 別ウィンドウが開くのでVSCodeの全画面状態は解除する
  5. ブレークポイントで停止するか,scanfでの入力待ちかでプログラムが停止する
  6. scanfの場合は別ウィンドウに値を入力,ブレークポイントの場合はウィンドウに「▶→↓↑○□」みたいなアイコン群が並ぶのでデバッグ作業ができる
⚠️ **GitHub.com Fallback** ⚠️