ウディタ中級者になるためのその8 ~デバッグ技術~

デバッグ技術について書いてなかったので、さらっと書いておこうと思います。
といっても、バグを発見する方法じゃなくて手早くバグの原因を特定する方法についてですけども。
自分のゲームはだいたいいつもバグだらけなので、バグを発見する方法があったら逆に教えてほしいです(たくさんテストプレイするしかないんだろな~)

とりあえず基本のところ。
F7…表示中の全ピクチャの情報を閲覧できます。ピクチャを最後に動かしたイベントとかも確認できるので便利。
F8…メモリに読み込んだピクチャやサウンドの情報、表示中のピクチャIDや実行中のイベントを確認できます。
F9…通常変数およびシステム変数を全表示できます。自分はあまり通常変数使わないので恩恵にあずかれないんですが。

以上のように、デフォでピクチャや通常変数あたりは閲覧できるようになっているので、そのあたりは問題なし。
ただゲームが複雑になると絶対可変データベースの中身を見たい!という状況に陥ると思うので、そんなときはウディタ公式にアップされているデバッグコモンを導入することをおすすめします。
(ちなみに自分はsuさんの製作された「Check it」というコモンを使ってます。並列実行のイベントを組んで、キーひとつでデバッグコモンを呼び出せるようにしておくと便利ではないかと思います)

で、これらの手段を駆使してもまだ原因不明なときがあります。
コモンが大量になってくると、コモンの構造も複雑になって「どこでバグが出ているのか分からない」という状況に陥ります。
こういうときは絡んだ糸をほぐすように、コモンの流れをたどって、イベントコマンドにデバッグコモンを挿んで逐一数値をチェックするようにしましょう。
「ここまではOK」「ここもOK」「ここで数値がおかしくなってる!」という部分が必ずあるはずです。

さらに、ピクチャ関連のバグがある場合について。
ピクチャの情報はデバッグコモンではなくF7、F8あたりを使って確認することになります。しかし、これらのコマンドはコモンイベントの中に挿むことができず、思ったような位置でピクチャ情報を確認することができません。
ということで、特定の場所でイベントの実行を一時停止させたいときはループを使いましょう
コマンドはこんな感じ↓ですね。

| |■ループ開始
| | |■ウェイト:1 フレーム
| | |■
| |◇ループここまで◇◇

このコマンドを挟むだけで、イベントの処理がそこで一時停止されてF7やF8を操作することができます。もちろんウェイトを挿んでいるので50万エラーが出ることもありません。

というように、上記のような技術(というほどでもないけど)を駆使することによりほとんどのバグは潰すことができると思います。
ただ、自分が思うにデバッグで一番大事なのは、いかにバグを見つけて潰すかではなくて、いかにバグを出さないかです。
もちろん人間なのでバグを出さないのは不可能なんですが、プログラムを組む時点でバグが出にくいように組んでおくのはとても大切なことです。デバッグ作業にかける労力が段違いです。

ではバグの出やすい構造とは何かという話ですが。

・常時並列実行は極力使わない
→他の記事でも書いてきましたが、並列実行イベントは発生するタイミングが難しく、特にこの中でいろいろな変数をやり取りしていたりすると、バグの特定が難しいうえに修正も難しいです。ウディタに慣れないうちは、常時並列実行イベントをいくつも組むのは控えた方が賢明だと思います。

・マップイベントを使わない
→これは個人の感覚かもしれませんが、マップイベントとコモンイベントが同時に動いて変数をやり取りしていたりすると、原因が特定しづらくなります。内容が複雑になるマップイベントは極力コモンイベントで処理した方がいい気がします。

・ディレイ系を使うときは慎重に
→ピクチャの表示・消去ディレイやサウンドのディレイ、自動キー入力あたりはバグの温床です。特にピクチャのディレイリセットを忘れたがために、本来表示されるはずのピクチャが表示されないみたいなバグはよくあります。
ディレイ系は原因が特定しづらいこともあるので、使うときは慎重になりましょう。

・コモンを細分化する
→いろんなコモンの中でよく使う処理は、専用のコモンを作ってコモンの役割を細分化しましょう。
イベントコマンドが長くなれば、その分だけバグも出やすくなるしデバッグも大変になります。また、コモンを細分化することによってプログラム全体の構造も分かりやすくなります。

関連記事
スポンサーサイト

コメントの投稿

非公開コメント

Twitter
カテゴリ
最新コメント
月別アーカイブ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR