Bash(Ubuntu)をVisual Studio Codeで使う。

多少Visual Studio Codeの知識があるもとのします。


今までGEditを使ってBashを書いてました。
といっても数日試してみましたー程度のBash歴です。

![bash_gedit.png](https://qiita-image-store.s3.amazonaws.com/0/205767/42ce8a76-163c-9389-63d1-f67d33e5cb03.png)

![bash_term.png](https://qiita-image-store.s3.amazonaws.com/0/205767/7a9c81af-39f9-c037-2265-eba2cf3ae194.png)



今回、Qiitaを始めるためにMarkdown用としてVisual Studio Codeをインストールしました(ローカルで編集するため)。
ついでにBashもVisual Studio Codeでも使えるようにしました。

結構ハマったのでメモです。

今回使用するのはこちらの拡張機能です。

[Bash Debugger](https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug)



## bashdbをインストール

Visual Studio Codeの拡張機能「Bash Debbuger」をインストールする前に「bashdb」をパッケージマネージャからインストールします。
これを飛ばしていたためにハマりました。


    sudo apt install bashdb



## Visual Studio Codeの拡張機能からBash Debuggerをインストール


![bashdebugger_install.png](https://qiita-image-store.s3.amazonaws.com/0/205767/45a60f61-4903-ba81-27c1-b79ee13676e8.png)



## launch.jsonで設定ファイルを編集

デバッグから構成の追加を選択。

![構成の追加.png](https://qiita-image-store.s3.amazonaws.com/0/205767/d4b8e9c8-b8c4-518b-8886-8c1474df3d9f.png)


Bash Debugを選ぶ

![環境の選択.png](https://qiita-image-store.s3.amazonaws.com/0/205767/4c095181-ff2c-9228-e7b1-4a2d80e49904.png)


3つ選択項目が出て来ます。

![スクリプトパス.png](https://qiita-image-store.s3.amazonaws.com/0/205767/d0fede49-ff0c-c7f2-10b2-644eec897f22.png)


この項目はデバッグアイコンを押した時、デバッグするファイルをどう選ぶのかを設定します。
とりあえず一番上を選ぶとBash Debuggerの設定がlaunch.jsonに追加されます。

```json
{
    "name": "Bash-Debug",
    "type": "bashdb",
     "request": "launch",
    "scriptPath": "${command.SelectScriptName}",
    "commandLineArguments": "",
    "windows": {
        "bashPath": "C:\\Windows\\sysnative\\bash.exe"
    },
    "linux": {
        "bashPath": "bash"
    },
    "osx": {
        "bashPath": "bash"
    }
}
```

nameは好きな名前に変更します。デバッグアイコンの横にラベル表示されます。
scriptPathの箇所でドットじゃなくてコロン使えと怒られてしまったので修正しました。

    "scriptPath": "${command:SelectScriptName}",



## デバッグ開始


あとは適当に.shファイルを作成してからデバッグイコン(緑の三角形)を押せばデバッグ開始です。
実行する.shを選ぶようになってますので選択します。今回はsample.shをデバッグ。

![デバッグ開始.png](https://qiita-image-store.s3.amazonaws.com/0/205767/450e3f1f-e153-2b55-3307-58fceea631c4.png)


>.shファイルがひとつもなかったらエントリがどうのこうのって空の状態になりました。

## ブレークポイント

＊今回は事前に４行目にブレークポイントを貼ってます。

![ブレークポイント.png](https://qiita-image-store.s3.amazonaws.com/0/205767/49e786fc-d3c5-86bf-6e59-ab37062872e7.png)

２のデバッグコンソールが閉じているときは１で開きます。
３はブレークポイントの場所でループ６回目の所で止めているところです。

四角で囲った部分で操作します。
緑の三角アイコンを押すと次のブレークポイントへ移動します(次のループでまた止まる)

ブレークポイントでコードの流れが一旦とまり、変数へカーソルを当てるなどすると、その時点での変数の値などを知ることが出来ます。
他にも呼び出し歴など便利な機能があります。


ブレークポイントは行番号の左側をクリックすると赤丸が出来ます。
好きなところにペタペタ貼ってみてください。外すときはもう一度クリックします。


## 設定項目３種類の違い


所で項目はそれぞれどういう意味なんでしょうね？気になるので手当たりしだい試しました。
nameが異なる以外は、主にscriptPathの違いのようです。



### 1. Script path should be selected from drop-down list of shell scripts in workspace

    "scriptPath": "${command.SelectScriptName}",

記述が間違ってると怒られるので変更。

    "scriptPath": "${command:SelectScriptName}",


この設定はデバッグが開始されるとき、とりあえず.shの拡張子のついたファイルをリストアップするからその中から選んでね！　ということだと思います(たぶん)。


![mode1.png](https://qiita-image-store.s3.amazonaws.com/0/205767/c06a274e-499c-b399-2642-2d3e70ab97ce.png)

さっきのドロップダウンのことです。



### 2. Script path should be hardcoded in launch task

    "scriptPath": "${workspaceRoot}/path/to/script.sh",

そのままの設定ではデバッグに失敗するので変更する。

    "scriptPath": "${workspaceRoot}/sample.sh",

この設定はデバッグが開始されるとき、ワークスペースの./sample.shを実行しますよ！　ということらしい。

![mode2.png](https://qiita-image-store.s3.amazonaws.com/0/205767/b2aaabf2-a7f5-c9f0-87a8-ba5b55c67070.png)


デバッグするファイルを設定ファイルに記述します。


### 3. Script path should be typed in developer when launching

    "scriptPath": "${workspaceRoot}/${command.AskForScriptName}",

記述が間違ってると怒られるので変更。

    "scriptPath": "${workspaceRoot}/${command:AskForScriptName}",

この設定はデバッグが開始される時、その都度実行する.shファイルの入力をおねがいしますね！　ということらしい。

![３つ目の項目.png](https://qiita-image-store.s3.amazonaws.com/0/205767/08d89752-491c-09e7-a141-e6f8edd62b5e.png)

デバッグアイコン押すごとに聞かれてくるので、ファイルのパスを入力する。