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

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

#個人的にはまった点
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# を実行する](http://qiita.com/dockurage/items/49e7295e7ff7458e26cd)

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



#デバッグまで
##C/C++ 拡張機能インストール
2016.08.14追記
command+shift+p > ext install > c/c++
一覧に出てくる、Microsoft製の C/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 の編集
編集後

```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で簡単に入る。

```json: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](https://qiita-image-store.s3.amazonaws.com/0/40894/cd6e109b-0a72-eb65-963b-40fbf81a44a5.jpeg)