5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VCI(VirtualCast Interactive)Advent Calendar 2023

Day 4

MoonSharp Debug完全に理解した!

Last updated at Posted at 2023-12-03

まず結論

  • 公式に書いてある説明通りにすれば使えてたよ
  • VCIのスクリプトの開始はバーチャルキャスト側からだよ
  • 最初の処理は一時停止しないよ。数十フレームしてから止まるよ

この記事にはMoonSharp Debugの使い方は書かれていません。
MoonSharp Debugの使い方については拙著の補足記事
「VCIデバッグ時の簡単なMoonSharp Debugの使い方」
を参考にしてください。

導入

みなさんこんにちは!VCIスクリプト書いてますか?
スクリプトを作っているとよくわからないバグが出るときがありますよね?
そんなとき役立つのがデバッガーです。

VSCodeにはVCIスクリプトのデバッガーに使えるMoonSharp Debugという拡張機能があります。
image.png

これを使えばバーチャルキャスト内で動かしているVCIのスクリプトの 一時停止一時停止中の変数の中身の確認 などができます。

つまりprint文を書かなくてもスクリプトの動きを確認できるのです!
(※他の人との同期挙動の検証除く)

・・・なのですが私が初めてMoonSharp Debugを導入したときうまく使えず「どこかの設定が間違っていて使えないのかな?」と思って2年くらいずっと放置してました。

実は使えていたにも関わらず!

そして最近ようやく使い方を「完全に理解した!」ので

  • 何故使い方がわからなかったのか?
  • 何に引っかかっていたのか

を書いていきます。

まずは環境設定

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

ここから先は環境設定が完了しているものとして話を進めていきます。

世間一般的(主観)なデバッガーとは?

世間一般で一番使われているであろうデバッガーと言えば?
それはExcelやWordのマクロ作成で使われる Visual Basic Editor ですね!(主観)
image.png
(特にExcelのマクロはどこにでもいますね)

Visual Basic Editorはスクリプトを書いて再生ボタンimage.pngを押してあげれば動きます。
止めたいところがあれば行の左側をクリックしてimage.pngマークを付けてあげればそこで止まります。

スクリプトの作成は別としてデバッガーであるVisual Basic Editorの使い方自体は簡単です。
有名なIDEのVisual Studioとかも大体同じですね。

じゃあMoonSharp Debugは?

今度はVSCodeでやっていきましょう。

VSCodeを立ち上げてデバッグしたいスクリプトファイルを選んだら
image.png
の赤枠で囲んだ部分にあるimage.pngを押すと↓のようにデバッグ用のペインが表示されます。

image.png

デバッグ用ペインの上の方にはVisual Basic Editorと同じように再生ボタンimage.png
がありますね!

バーチャルキャストを起動してない状態でとりあえず押してみる。

image.png
はいVSCodeさんに怒られました。
どうやら 「127.0.0.1:41921に繋がんねーんだけど?ちゃんと設定してる?」 と言っているようです。

バーチャルキャストを起動して再生ボタンを押してみる。

ではバーチャルキャストを起動します。
image.png
VCIを出すよりもっと前のスタジオやルームにすら入っていないトップ画面の状態でやってみます。
image.png
何やらツールボタンみたいなものimage.pngが出てきて 「MoonSharpと繋がったよ!」 と言われました。

Q:んで再生ボタンを押したけどVCIスクリプトは動かないの?

A:はい。これだけじゃ動きませんしMoonSharp Debugにスクリプトを動かす機能はありません。

先ほどの再生ボタンimage.pngをよく見ると MoonSharp Attach と書かれていますね。

つまりこのボタンはスクリプトを動かすボタンではなく、 バーチャルキャスト(の中のMoonSharp)に接続するためのボタン だったというわけです。

なのでスクリプトを動かしてデバッグするにはバーチャルキャスト内でVCIを取り出してから行わないといけません。

まぁデバッグはVCIオブジェクト自体の動きも見ながら行いたいので当然と言えば当然ですね。
でもこれVisual Basic Editorみたいなのしか知らない私は最初全然わかりませんでした。

それとMoonSharp Debugにはスクリプトの再実行機能もありません。
再実行したい場合は通常のようにバーチャルキャスト上で再読み込みするか、デバッグ用のスクリプトファイルを上書き保存する方法で行います。

バーチャルキャストとMoonSharp Debugとのやり取り

大体次みたいな感じです。

  • まず接続

image.png
(接続の際にデバッグしたいVCIを出してなかった場合は、VCIを出した後にツールボタンのimage.pngを押してください。)

  • MoonSharp Debugからバーチャルキャストに対象となるVCIのスクリプトファイルの一時停止位置を指定する
    image.png

  • 指定箇所に来たらバーチャルキャストからMoonSharp Debugに一時停止したこととその時の変数の中身を教える
    image.png

  • 一時停止を解除して次の一時停止箇所まで進むようにMoonSharp Debugからバーチャルキャストに知らせる
    image.png

基本的にMoonSharp Debugでやるのは一時停止位置の指定になります。
改めて最初から実行したい場合は先ほど説明したようにバーチャルキャストで操作して行います。

なお、この説明で書かれているバーチャルキャストというのはローカルで動いているアプリケーション側のことです。
MoonSharp Debugがインターネット上のバーチャルキャストのサーバーと直接やり取りをすることはありません。

最大の罠 ~始めの方の処理は一時停止しない!~

それではやってみましょう。

停止箇所を指定したテスト用のコードのスクショです。
image.png

行の左側にimage.pngが付いているのが停止箇所となります。

これを動かした場合、3行目の

local x = "World"

で停止するので、最後のprint文の「end」は表示されないはずです。

実行結果はこちら

image.png

「end」が表示されてしまってます。止まってません。
これ何度やっても結果は変わりません。
2年前の私はここで自分の設定が間違ってると思いMoonSharp Debugを使うのを諦めてしまいました。

実はこの状態でもちゃんとMoonSharp Debugはちゃんと動いている のですがとある仕様?により止まらなかったのです。

追試

では今度はこんなコードでやってみましょう
image.png

そして結果はこちら

MoonSharp Debugが動くVSCode側では8行目で停止したと表示されました。
image.png

バーチャルキャスト側はというと・・・
image.png
62カウントされたところで停止していました。

つまりどういうことかというと

MoonSharp Debugで一時停止箇所を指定しても最初のある程度の時間は停止をできないようです。

たぶんバーチャルキャストとMoonSharp Debugとの通信でどうしてもラグが発生してしまうためで仕様上のものと思います。

MoonSharp Debugを使うときはこの点に注意が必要です。

おしまいに

というわけで今回は「私はどうしてMoonSharp Debugを使えなかったのか?」という内容で記事を書いてみました。

デバッグ作業は辛いものですが、この記事が少しでもみなさんの役に立てば幸いです。

それではまたの機会に

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?