最終更新日 2025-02-18
「ModDebugger」の使い方
概要
ModDebuggerは、いわば、デバッグ情報の受信機です。
よって、この使い方を理解するためには、
実際にModDebuggerへとデバッグ情報を発信してみるのが一番理解が早いでしょう。
デバッグ情報を送信する側の簡単なサンプル
- まず、VC++にて、適当に新規プロジェクトを作ります。
「Win32のコンソールアプリケーション」で、「空のプロジェクト」あたりが良いでしょう。
(これでなくとも、通常のWindowsプログラムでも、x64でもなんでも問題ないです)
- ここでは日本語マルチバイト(=cp932≒Shift-JIS)しか取り扱わないので、
プロジェクトのプロパティを開いて、文字セットを変更します。
プロジェクトの構成プロパティの「全般」の項目に「文字セット」という項目がありますので、「Unicode文字セットを使用する」というのを変えて、「マルチバイト文字セットを使用する」にしましょう。
- さて、本題に入ります。
ソースは、以下のようにする。
まるで、printf("~")と書くのと同じ要領で、OutputDebugString("~") を利用します。
(あってるかどうか、コピペが可能なソース。)#include <windows.h> void main(void) { OutputDebugString("テスト出力"); }
- ここでは、話をわかりやすくするために、上のソースにて「MyMain.exe」というプログラムを作ったとします。
Releaseコンパイルし、出来上がった .exe を直接実行してみましょう。
(Visual C++から実行するのではなく、直接ちゃんとExplorerによる実行や、コンソール画面から実行する必要があります。)
…何も表示されないでと思います。
そう、何も表示されなくて正解です。
しかし、Windowsのデバッグ情報共有領域のようなところに、ちゃんと出力されているのです!!
デバッグ情報をリアルタイムに読み取るのがModDebugger
- では、ModDebugger.exe を実行してください。
(※天翔記が立ち上がっていれば、終了させること。)
最初は、上図のような真っ黒な画面ですが、
人によっては、何か「怪しげな文字」が順次、画面に流れていくかもしれません。
これは何らかのアプリケーションが、Windowsのデバッグ情報領域に書き込んでいるためです。
- さて、では、この黒いウィンドウを開いた状態にしたままで、先ほど作った、「MyMain.exe」を実行してみましょう。
- 以上で、OutputDebugString("~"); を、とあるプログラムで記述することにより、
そこが実行されると、ModDebugger.exe が受信する、ということが理解できたでしょう。
これがあれば、PluginMod用の「一般MOD」や「ScenarioMod」の制作時のデバッグで役立つはずです。
OutputDebugStringをprintf風に
OutputDebugString 関数を少し便利にしましょう。
OutputDebugString関数は、そのままだと、「char *型」しか受け入れることができません。
これでは、不便ですので、printfと同じように「フォーマット書式化文字列」を使えるような関数として、
「デバッグ出力(const char *format, ...)」を考えてみましょう。
#include <windows.h> #include <stdio.h> void デバッグ出力( const char *format, ... ) { char szBufDebug[4096] = ""; va_list arg; va_start(arg, format); vsprintf_s(szBufDebug, format, arg); va_end(arg); OutputDebugString( szBufDebug ); } void main(void) { デバッグ出力("%d:%s", 33, "テスト出力"); }
このように、printf と同様に利用できるようになりました。
これなら便利に役立つことでしょう。
なお、ScenarioMod SDKには、この関数「デバッグ出力」をさらに発展させたものが搭載されています。