】バグの見つけ方を説明するに当たり、幾つかの予備知識が必要になります。前提として、バグには大きく分けて2種類あります。それは「クラッシュするバグ」と「そうでないバグ」です。「クラッシュするバグ」は遭遇するとゲームが強制終了するのでゲーム進行は不可能、バグを取らなければ何も出来ないと言うような状態に陥ります。「そうでないバグ」とは、例えば重量軽減MODなんかで良く話題になる「MODで改造した部分が反映されていない」とか、武器のステータスがおかしいとか、明らかにバグではあるものの、ゲームが続行可能なバグの事です。発生した時の精神的ダメージの大きさでは前者の方が大きい気がしますが、深刻さでは後者の方が大きいのが特徴です。前者であるならばクラッシュする事により確実にバグがあることが判明していますし、バグ報告画面によりある程度情報を得る事が出来ます。後者の場合、そもそもバグが存在しているのか気づく事が非常に困難です。「MODを導入したにも関わらず期待していた効果が発揮されない」などと言う時に結果的にバグがあることを知る事ができるのみです。実際、後者の方はこれと言ったデバッグの方法を示す事ができません。現象から推察して「多分、あの辺りが間違ってるのかなー」と絞り込む必要があるのです。よって、ここでは「クラッシュするバグ」のデバッグ方法の基本を説明しようと思います。何はともあれ、クラッシュしてくれないと説明のしようもないので、クラッシュさせて見ます。前回のスクリプトをちょいと弄って、わざと間違えた命令を書いてみましょう。弄るべき部分は、ファイル「ngc_mod.script」、この中には前回作った以下のスクリプトがありますね。endこの中で、ロケットランチャーを出現させる命令があります。db.actor:id())これですね。これの先頭の「alife」の記述をわざと間違えて「blife」に書き換えてみましょう。「blife」なんて命令は存在しません。こんな命令を与えると、ゲームはどんな動きをするのでしょうか?では実行してみます。Synchronizing...」の辺りでクラッシュすると思います。コンティニューすると上手く動く場合がありますが、これはこの間違いを挿入した箇所は前回説明した条件分岐により、「ゲーム開始時のみ」動くようにしてあるからです。コンティニュー時には条件が成立せずに、この間違ったコードを読まずにゲームが動いてしまうと言うわけです。めでたく(?)クラッシュしたので、早速クラッシュ内容を見てみましょう。クラッシュした時にやる事。こんな画面が出ますよね。出ない事もありますが、「たまたま調子が悪くて表示されなかっただけ」な場合が多いので、もう一度ゲームを起動して、同じ要因でクラッシュさせる事を繰り返せば、2、3回のうちには出るはずです。出たら、「More...」のボタンを押してください。何だか小難しそうなのが出てきましたね。ここでは「Save...」ボタンを押してください。保存ダイアログが出るので、好きな場所に保存しておきましょう。これでこの画面は終了して構いません。「Close」を押しちゃってください。こんなファイルが保存されているはずです。XRayEngine_error_report_YYMMDD-HHMMSS.zipYYMMDDの部分には日付が、HHMMSSの部分には時刻が入ってると思います。これを解凍してみると・・・。crashdump.dmperrorlog.logこんなのがありますね。上の「crashdump.dmp」は、恐らくシングルプレイヤーSDK(開発環境)があれば見れるのかも知れませんが、少なくとも今は閲覧出来ません。バイナリエディタ(データを16進数で直接読めるエディタ)などで閲覧出来たとしても、それが何を意味しているのかの情報が何ひとつ無いので、ここでは使わない事にします。ここで使うのは下のファイル、「errorlog.log」です。これはテキストエディタで見る事が出来ます。中を開いて見ましょう。中の情報の大半は上記と同じ、それが何を意味するのかの情報ソースが提供されないと意味を持たないものです。見るとほんの少しですが、意味の判る部分があります。12行目辺りからこんな文章がありますね。value)ここで見るべきところは一番下の項目、「Arguments」の文章です。この一文が現時点で我々に与えられた唯一のバグの手がかりと言っても過言ではありません。value)エラー名称に続いて、なにやら書いてありますね。chernobyl\gamedata\scripts\ngc_mod.script:24:これはバグの位置です。chernobyl\gamedata\scripts\」、ファイル「ngc_mod.script」の24行目でクラッシュしたと言っているわけですね。value)これがクラッシュの直接的な原因です。