VCIデバッグ時の簡単なMoonSharp Debugの使い方

この記事は拙著 [「MoonSharp Debug完全に理解した！」](https://qiita.com/teiron/private/2272ecd06b39a404ba34)の補足記事となります。

# 環境設定
環境設定は公式の説明ページを参照ください。

:::note info
リンク先はこちら
- [VCIスクリプトの開発環境の導入(バーチャルキャスト公式Wiki)](https://wiki.virtualcast.jp/wiki/vscode/tutorial)
- [VSCodeでデバッグをする方法(バーチャルキャスト公式Wiki)](https://wiki.virtualcast.jp/wiki/vscode/debugger)
:::
# デバッグモード時のVSCodeの画面の構成
### 全体
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/42a4d27f-2d9b-efab-fc88-857dbc9af304.png)

### デバッグペイン表示非表示ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/70e6e118-ccd1-6949-e6ad-a388e12989a0.png)ボタンを押すと下の変数内容の表示枠やウォッチ式の表示枠の表示切替をします。
### デバッグペイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/d1958700-fbce-5220-c916-f5ef9af7f700.png)

### MoonSharp Debugとバーチャルキャストの接続開始ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/c3101c0b-6823-e86c-3279-6dd251498094.png)
接続するだけです。

### 変数内容の表示枠
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/c7eaf94a-1314-bc22-7aa9-31bc7d0e83a9.png)

この枠に一時停止した際の変数の内容が表示されます。
ちょっとわかりにくいです。
### ウォッチ式の表示枠
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/e99d5112-8422-c438-9b11-8c8a150e868c.png)

この枠に変数名を指定すると変数の内容が表示されます。
変数内容の表示枠よりわかりやすいです。
### ツールボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/1448e64f-43e3-9197-cad6-726fc2f3fabc.png)

一時停止や再開、1行ずつ実行やMoonSharp Debugとバーチャルキャストの接続切断ができます。
ただ、一部ボタンは機能していないようです。
| ボタン | 機能 |
|:-:|:-|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/bc285d7c-85ef-bee4-3c15-92a3d58df196.png) | 一時停止する  |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/b4b9677e-71ad-31ef-c3ce-3a4f3f311dd0.png)  | 一時停止状態から再開する  |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/3e71ac8f-ace4-9e80-e660-4ea48f08b75f.png) | 本来は「行を飛ばす」はずだけど一行だけ進める機能になっている  |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/f36cd566-717e-a4dd-8bf5-80c2fcd6049a.png) | 1行だけ進める(ただし関数から出ると止まるようです)  |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/8f8023a1-ae8b-cef5-b8d2-3b86288b24d1.png) | 本来は1行戻すはずだけど変数内容は変わらず停止ポイントまで戻るだけのようです  |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/615b2759-1522-402d-5d9c-a912a71e0ef7.png) | デバッグモードを再起動？する。接続後にVCIを出したとき等で使用|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/23e96c2e-c3d6-d306-74eb-db7dc14ac3c2.png) | MoonSharp Debugとバーチャルキャストの接続を切断する |
# デバッグモードの開始
 デバッグモードの開始には何通りかの方法があります。

### VCIを呼び出した後から開始する方法
次の方法でMoonSharp Debugとバーチャルキャストが接続され、デバッグモードが開始されます。
- メニューの「実行」から「デバッグの開始」を押すかF5キーを押す
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/446650f2-bc48-eb78-9aab-4e3f984927fc.png)

- VSCodeのデバッグペインを表示させて ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/c3101c0b-6823-e86c-3279-6dd251498094.png)を押す

### MoonSharp Debugとバーチャルキャストを先に接続した後にVCIを呼び出して開始する方法
先にMoonSharp Debugとバーチャルキャストを接続している場合はVCIを呼び出した後にツールボタンの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/615b2759-1522-402d-5d9c-a912a71e0ef7.png)を押すとデバッグが開始されます。

または一度ツールボタンの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/23e96c2e-c3d6-d306-74eb-db7dc14ac3c2.png)を押してMoonSharp Debugとバーチャルキャストの接続を切った後にF5キー等で再接続をしてもデバッグモードに入ります。

### デバッグしているVCIを再度再読み込みして再開する方法
デバッグしているVCIを再読み込みするとデバッグモードが止まってしまいます。
そんなときはツールボタンの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/615b2759-1522-402d-5d9c-a912a71e0ef7.png)を押してください。

# 動いているスクリプトを一時停止する方法
### とりあえず一時停止する方法
ツールボタンの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/bc285d7c-85ef-bee4-3c15-92a3d58df196.png)を押すと止まります。
停止すると停止した行の先頭に![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/716dd665-696a-9c6c-0781-28a35b7d938d.png)のマークが付きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/46ef8c02-af89-c4c8-4243-7eceed7aee43.png)

停止から再開するときはツールボタンの![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/b4b9677e-71ad-31ef-c3ce-3a4f3f311dd0.png)を押すと再開します。
### 指定したスクリプトの行で止める方法
止めたいコードの行の左側をクリックすると![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/550ff343-4ab7-aed4-8191-6431e89e263c.png)が表示され、そこで止まるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/d3fc5603-8d72-f999-f0fc-3a1e06dbf54a.png)

複数行指定でき、別のモジュール内の行もちゃんと停止します。

ある変数が特定の状態のときだけ止めたい場合は下のようにif文で囲ってその中で一時停止を指定してください。
```lua
-- x が 100 のときに止めたい場合

if x == 100 then
 a = 0 -- 適当な処理を書いてこの行を一時停止指定する
end
```

# 一時停止時に変数の中身を確認する方法
### 変数の枠
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/de7ddcf1-7968-030a-b93a-1e3cd75c424b.png)

グローバル変数などが自動で表示されますが結構わかりにくい・・というか自分は使い方がわかりません。
### ウォッチ式の枠
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/a888b82d-69ec-2854-be48-7e9e936d78f9.png)

「+」ボタンを押して確認したい変数名を入力すると表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/89643702-b4a3-71da-ce74-5ab016e6c0cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406587/e9f3ee45-89e2-a8cd-2f65-2e67d252131d.png)

ただスコープ内の変数しか中身を確認できないようです。