77
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Mac の Visual Studio Codeで C/C++ をデバッグするまで(OSX10.11.6, VSCode1.4.0)

MacのVisual Studio Codeで、Cをデバッグするのにはまったのでメモしておきます。
もっと良い方法あれば教えてほしいです...

個人的にはまった点

  1. 同じパスにプロジェクトは1つ。(tmpフォルダにtest.c, test.rb, test.py とかはダメ)
  2. 実行とビルドは分けて考える。
  3. デバッグオプションつけてビルドしてから、デバッグする

1.
同じパス上で複数の言語のテストコード書いてたら、ビルドに成功したり失敗したりして混乱してました。
以下ファイルを各プロジェクト毎に設定する必要あり。
.vscode/tasks.json
.vscode/launch.json

2.
Sublime Text3と同じ感覚で実行しようとして混乱してました。
実行はRunnerという拡張機能をインストールして行いました。
この記事の通りに設定して行いました。
Mac の Visual Studio Code で C/C++/C# を実行する

3.
当然ですが、clang でのコンパイルオプションにデバッグ情報付加する必要あります。

デバッグまで

C/C++ 拡張機能インストール

2016.08.14追記
command+shift+p > ext install > c/c++
一覧に出てくる、Microsoft製の C/C++ という拡張機能をインストールする。

コーディング

test.c
#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    int c = a * b;
    printf("%d\n", c);
    return 0;
}

ビルド(失敗)

command+shift+b でビルドを試みますが、失敗します。
タスクランナーが構成されていません。 とメッセージが出るので、
タスクランナーの構成 > Others を選択。

tasks.json の編集

編集後

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "clang",
    "isShellCommand": true,
    "args": [
        "test.c", // プログラムファイル
        "-g",     // デバッグ情報付加する。ないとデバッグできない。
        "-O0",    // コンパイル速度重視
        "-m32"    // 64bitの場合
    ],
    "showOutput": "always"
}

ビルド

command+shift+b でビルドする。以下ファイルができる。
./a.out.dSYM
./a.out

launch.json の編集

F5 を押す。
環境の選択 > C++(GDB/LLDB)

launch.jsonを編集する。
C/C++ それぞれの "program"行を変更する。
デバッガにLLDBでなくGDB使用したい場合は適宜変更する。homebrewで簡単に入る。

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Launch",
            "type": "cppdbg",
            "request": "launch",
            "targetArchitecture": "x64",
            // "program": "enter program name, for example ${workspaceRoot}/a.out",
            "program": "${workspaceRoot}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "linux": {
                "MIMode": "gdb"
            },
            "osx": {
                "MIMode": "lldb"
                // "MIMode": "gdb" // デバッガにGDBを使用したい場合。homebrewで brew install gdb で入る
            },
            "windows": {
                "MIMode": "gdb"
            }
        },
        {
            "name": "C++ Attach",
            "type": "cppdbg",
            "request": "launch",
            "targetArchitecture": "x64",
            // "program": "enter program name, for example ${workspaceRoot}/a.out",
            "program": "${workspaceRoot}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "processId": "${command.pickProcess}",
            "externalConsole": false,
            "linux": {
                "MIMode": "gdb"
            },
            "osx": {
                "MIMode": "lldb"
            },
            "windows": {
                "MIMode": "gdb"
            }
        }
    ]
}

デバッグ開始

F9 でブレイクポイント設定できる。
command+shift+d でデバッグウィンドウにできる。
F5 でデバッグ開始する。

スクリーンショット 2016-08-12 17.12.27.jpg

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
77
Help us understand the problem. What are the problem?