Debug 情報を表示する

デバッグ情報を表示する方法を幾つか紹介します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. プログラマにとって、エラーを無くしてプログラムを完成させる能力は非常に重要です。
    ティーポットの3Dモデルを描画するプログラムを材材にして、デバッグ情報を表示する幾つかの方法を紹介します。
    3Dモデルの描画は別のページに譲るとして、デバッグ情報の表示に的を絞って参照して下さい。
  2. Windows Program で説明した MessageBox を使う方法です。
    MessageBox を実行すると、処理を一時中断して確認を求めます。
        int id;
    
        case WM_CLOSE:
            id= MessageBox(NULL,(LPCSTR)"終了しますか",
                    (LPCSTR)"終了確認", MB_OKCANCEL | MB_ICONQUESTION);
            if (id==IDOK)
            {   OutputDebugString("プログラムを終了します\n");
                DestroyWindow(hWnd);
            }
            break;
        

    OK/CANCEL の応答の必要が無いなら、もっと簡単です。
        #define EMSG(x)     MessageBox(NULL,x,"DirectX D3D",MB_OK);
    
        EMSG("Create Device Error");
        
  3. OutputDebugString() を使う方法です。
    MessageBox と違って、処理が中断することはありません。
    文字列は出力ウインドウに表示されるので、通常に実行したときは影響がありません。
        OutputDebugString("Direct3D の初期化を行います\n");
        OutputDebugString("モデルとマテリアルと光源の初期化を行います\n");
        
    出力ウインドウに表示される様子を掲載します。
    下の画像はこのプログラムの物では無いので念のため。

  4. 刻々と変化する情報を Title Bar に表示する方法です。
    デバッグ情報を表示する VarMsg() 関数を定義します。
        //Title Var Message
        void    VarMsg(int n)
        {   char    str[80];
            wsprintf(str,"%d\n", n);
            SetWindowText(g_hWnd,(LPCSTR)str);
        }
        
  5. メッセージループから VarMsg() で描画速度を表示してみました。
        int     g_Time = 0;
        int     g_Last = 0;
                ・・・
        else
        {   g_Last = g_Time;
            g_Time = timeGetTime();
            if (g_Time>g_Last)  VarMsg(1000/(g_Time-g_Last));
            Draw();
        }
        

超初心者のプログラム入門(DirectX9 game program)