Amazon 初売り

« 3連休を活用して初音ミク冒険記の作業をしよう | トップページ | 本当は毎月公開にしたかったんだけど »

2014.03.21

早速脱線してデバッグ用コンソールを表示してみた

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

ええと、今日はバグをやっつけるという記事を
寝る前に書いたはずなんだが、早速、脱線して
デバッグ用コンソールを表示するデバッグ機能を作ってみた。

DXライブラリにはprintfDxというデバッグ用の関数がある。
これは、一通りの画面描画処理の後に
描画処理が実行されるので、最前面に情報が表示される便利な関数だ。

使用例
Screenshot0120

が、一通りの画面描画処理の後に描画されるため
出力場所によっては、文字が見づらいという難点がある。

AppLogAdd関数を使ってLog.txtに出力するって手もあるが
これだとテキストエディタをアクティブにしないと
ログファイルの再読み込みをしないので、使い勝手が悪い。

まぁ、VisualStudioの「出力ウィンドウ」を表示しておけば良い
という話もあるんだけどね。

そこでデバッグ用の機能として
デバッグ用コンソール画面を使う機能を実装してみた。

新しく作った関数は、以下の3つ


//*******************************************************
// デバッグ用のコンソールの初期処理(メインループ前に呼ぶ)
//*******************************************************
void initDebugConsole(){
// デバッグ用コンソール画面表示フラグが表示しない設定の場合、処理終了
if(debugInfo.debugConsoleDisplayFlg == FALSE){
return;
}
//デバッグ用にコンソールを呼び出す
AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);
// デバッグコンソールがアクティブウィンドウになるので
// ゲーム本体のウィンドウをアクティブにする
SetForegroundWindow(GetMainWindowHandle());
}
//*******************************************************
// デバッグ用のコンソールのクリア処理
//*******************************************************
void clearDebugConsole(){
// デバッグ用コンソール画面表示フラグが表示しない設定の場合、処理終了
if(debugInfo.debugConsoleDisplayFlg == FALSE){
return;
}
system("cls");
}
//*******************************************************
// デバッグ用のコンソールの終了処理(メインループ後に呼ぶ)
//*******************************************************
void endDebugConsole(){
// デバッグ用コンソール画面表示フラグが表示しない設定の場合、処理終了
if(debugInfo.debugConsoleDisplayFlg == FALSE){
return;
}
//コンソール解放
FreeConsole();
}

<処理の流れ>
1.DXライブラリのメインループの前の処理
debugInfo.debugConsoleDisplayFlgにTRUEかFALSEを設定することで
デバッグ用コンソールの表示有無を設定し、
initDebugConsole();
debugInfo.debugConsoleDisplayFlgがTRUEの場合、
デバッグ用コンソールウィンドウが表示される。

※debugInfo構造体は、かげさんが初音ミク冒険記の開発に使っている
 デバッグ情報を格納する構造体。
 debugInfo.debugConsoleDisplayFlg自体はintの変数で
 デバッグ用情報ファイルが存在しない場合、FALSEで初期化される。
 デバッグ用情報ファイルが存在する場合は、ファイルの値が設定される
 という仕組みにしている。

2.メインループでの処理
通常通りprintfを使う。(printfDxではない)
これでデバッグ用コンソールウィンドウにprintfで出力した内容が表示される。
必要に応じてclearDebugConsole();で
デバッグ用コンソールウィンドウをクリアする

3.メインループを抜けた後の処理
endDebugConsole();
を呼び出すだけ。


するとこんなことができる。
Screenshot0121

ね、簡単でしょ。


 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: 早速脱線してデバッグ用コンソールを表示してみた:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。