hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
HSP3のデバッグウィンドウは、HSP本体 (hsp3.exe など) とは切り離されており、hsp3debug.dll によって提供される拡張プラグインの一つと捕らえることができます。
このことから、hsp3debug.dllをHSP3のデバッグウィンドウ呼び出しルールに則って作成し、差し替えることによって、デバッグウィンドウを自分で作ったものにすることが出来ます。
ただしBorland製のコンパイラ( BCC )とマイクロソフト製のコンパイラ( VC )とで生成されるDLLの種類が異なるため、Borland製コンパイラでは作る際に別途defファイルが必要となります。
+ | HSP3DEBUGの定義 (hsp3debug.h より引用) |
|
次の2つの関数はHSPから呼ばれるため、名前、戻り値、引数並びを変更してはいけません。
EXPORT BOOL WINAPI debugini( HSP3DEBUG *p1, int p2, int p3, int p4 )
デバッグウィンドウを使用する際に、最初の一回だけ呼び出される関数です。
通常はここでデバッグウィンドウの初期化・表示をします。
また、引数から、デバッグファンクションを利用するためのポインタ HSP3DEBUG * が与えられます。
EXPORT BOOL WINAPI debug_notice( HSP3DEBUG *p1, int p2, int p3, int p4 )
変数の内容など、HSPからデバッグウィンドウの更新を要求されたときに呼び出される関数です。
p2 は、これが呼び出された原因を示します。
p2 | 内容 |
---|---|
0 | stop などにより、実行が停止した (assert, wait, await では送られない) |
1 | logmes命令が実行された (文字列は ctx->stmp にある) |
実行中のスクリプトの状態を取得するための関数は、HSP3DEBUG構造体が持つ関数ポインタとして提供されています (以下、関数ポインタを関数と同様に扱います)。
void (* dbg_curinf)( void );
HSPに実行中の行番号とファイル名を問い合わせます。
結果は同構造体のメンバ line, fname に設定されます。
char * (* get_value) (int p1);
スクリプトの情報を取得します。
以下に示す列挙型の値を指定します。
p1 | 内容 |
---|---|
DEBUGINFO_GENERAL | 標準デバッグウィンドウの「全般」と同じ項目を表すリストを取得する |
DEBUGINFO_VARNAME | 予約・未定義 |
DEBUGINFO_INTINFO | 予約・未定義 |
DEBUGINFO_GRINFO | 予約・未定義 |
DEBUGINFO_MMINFO | 予約・未定義 |
ここで得られる「全般」リストは、改行区切り (メモリノートパッド形式) の文字列です。偶数行目が項目、その次の行がその内容です。
これを呼び出した後は、受け取ったポインタがいらなくなった際に、dbg_close() を呼ぶ必要があります。
char * (* get_varinf) (char *p1,int p2);
変数の情報を取得します。
p1には、変数情報を取得する変数名へのポインタか、NULLポインタを渡します。
p2には取得する情報のタイプを組み合わせて指定できます (ビットフラグ)。取得できる情報の一覧は次の通りです。
p2 | p1 | |
---|---|---|
NULL | 変数名 | |
0 | グローバル変数のリストを取得する | 変数を検索し、その変数についての概要を取得する |
1 | リストのソートを示すが、処理はしない | (無視) |
2 | モジュールの中の変数も含める | (無視) |
4 | (無視) | 取得内容に配列要素を含める |
8 | (無視) | 取得内容にメモリダンプを含める |
変数名は、スクリプトで使われている正確な変数名を表す文字列でなければなりません。通常は先に変数名のリストを取得してから、リスト内から有効な変数名を取得し、変数の内容を取得します。
これを呼び出した後は、受け取ったポインタがいらなくなった際に、dbg_close() を呼ぶ必要があります。
void (* dbg_close) (char *p1);
受け取ったデバッグ情報を解放します。
get_value()とget_varinf()を呼び出した場合、必ずこの関数を呼び出してデバッグ情報の取得を終了しなければなりません。
その際、必ずget_value(), get_varinf()で得られたポインタを渡さなければなりません。
int (* dbg_set) (int p1);
デバッグモードを表す定数を指定して、デバッグモードを変更します。
指定できる値は以下の通りです。
p1 | 機能 | 詳細 |
---|---|---|
HSPDEBUG_RUN | 実行 | 処理が停止している場合は停止している次の行から通常モードで処理を再開します。 |
HSPDEBUG_STOP | 停止 | 実行中の行で処理を停止します。 |
HSPDEBUG_STEPIN | 次 | 処理が停止中の場合のみ、停止している次の行を処理して停止します。 |
戻り値はモードが変更されると0、モードが変更されなかったときは0以外の数値が返ります。
dbg_set()関数を使うと、すぐにHSPCTX構造体のrunmodeメンバに状態が反映されます。
runmodeとデバッグモードでは使う定数が異なるのに注意が必要です。
HSPから呼ばれるエクスポート関数 debugini(), debug_notice() の二つの関数を、VC互換のエクスポート名に変換するために以下の内容のdefファイルを用意します。
EXPORTS _debugini@16=debugini _debug_notice@16=debug_notice