<Debug Message/HEAD>

Debug Message のプログラム

Debug Message を出力する Windows の最も簡単なプログラムです。
Debug Message は Debug モードで実行した時に専用のウインドウに出力されます。
普通に実行した場合は、全く影響が無くデバッグ情報の収集に適しています。

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

プロジェクトの作成

  1. [スタート][プログラム] から VC++ を起動して下さい。
    VC++ のアイコンをダブルクリックして起動することもできます。
  2. 新規プロジェクトで[空のプロジェクト](DebugMsg)を作成します。
    1. [ファイル][新規作成][プロジェクト]を選択すると新しいプロジェクトのウインドウが表示されます。
    2. [プロジェクトの種類]から[Visual C++ プロジェクト]を、[テンプレート]から[Win32 プロジェクト]を選択します。
    3. [プロジェクト名]に[DebugMsg]とタイプします。
      赤い丸印が要注意箇所で、画像とは異なるので注意して下さい。
      説明の画像
  3. [OK]をクリックしてアプリケーションウイザードを表示して下さい。
    [Windows アプリケーション]を確認して[空のプロジェクト]にチェックを入れ[完了]をクリックします。
    赤い丸印が要注意箇所で、画像とは異なるので注意して下さい。
    説明の画像
  4. [DebugMsg]のフォルダーと空のプロジェクトが作成されます。
  5. 下記のソースをメモ帳などでタイプして debugmsg.cpp の名前で格納します。
    ソースプログラムの中では、大文字と小文字の区別が必要です。
  6. [プロジェクト][既存項目の追加] から debugmsg.cpp を選択してプロジェクトに追加します。
  7. [デバッグ][デバッグなしで開始] を選ぶと、コンパイルに続いて実行が行われます。
    VC Ver6.0 では [ビルド] から [デバッグの開始][実行] を選びます。
  8. ページ先頭の画像のように "Test Debug Message" がデバッグ用のウインドウに表示されます。
    通常に実行したときは、何も表示されません。
  9. printf() と同様の仕様で Debug Message を出力する関数もあります。
    詳細は dprintf() で Debag 情報を印字する を参照して下さい。
    Program Debug Tool を使う方法は Program Guid を参照して下さい。

debugmsg.cpp のソースコード

/******************************************************/
/*★ Debug Message を表示する   1999-10-31  前田 稔 ★*/
/******************************************************/
#include <windows.h>

//★ Windows MAIN 関数
int PASCAL  WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,int nCmdShow)
{
    OutputDebugString("Test Debug Message\n");
    return TRUE;
}

【演習1】

  1. OutputDebugString は、Debug 情報を出力する最も手軽な方法ですが、文字だけでなく数値も表示できると、もっと便利ですね。
  2. 「number= 値」の形式で Debug 情報を出力する関数 Debug() を作成して下さい。
  3. TEXT 形式に編集するときは wsprintf() 関数を使います。
    wsprintf() は DOSモードの sprintf() と同じ関数です。
  4. Debug() を呼び出す Windows Main 関数です。
    int PASCAL  WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,int nCmdShow)
    {   int     num;
    
        for(num=1; num<11; num++)   Debug("number",num);
        return TRUE;
    }
    
  5. プログラムを実行したときに表示された結果です。
    number= 1
    number= 2
    number= 3
    number= 4
    number= 5
    number= 6
    number= 7
    number= 8
    number= 9
    number= 10
    


【演習2】

  1. テーブルの値を16進数でダンプする Debugx() 関数を作成して、テーブルの値をダンプします。
  2. Debugx() を呼び出す Windows Main 関数です。
    int PASCAL  WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,int nCmdShow)
    {   char    tbl[20]=”0123abcABC;
    
        Debugx(tbl,10);
        return TRUE;
    }
    
  3. プログラムを実行したときに表示された結果です。
     30313233616263414243 
    
  4. Function Prototype です。
    pos がポインタで len がダンプするバイト数です。
    void Debugx(char *pos, int len);


【演習3】

  1. テーブルの値を16進数でダンプする Debugx() 関数を作成して、テーブルの値をダンプします。
  2. Debugx() を呼び出す Windows Main 関数です。
    int PASCAL  WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,int nCmdShow)
    {   int     num;
        int     tbl[20];
    
        for(num=0; num<8; num++)
        {   tbl[num]= num;
            tbl[num+10]= 65536+num;
        }
        Debugx((BYTE*)tbl,sizeof(int)*20);
        return TRUE;
    }
    
  3. プログラムを実行したときに表示された結果です。
    [ 50] は sizeof(int)*20 で渡されたバイト数です。
    何故 50 なのでしょう?
    tbl[20] に格納されている値を確かめて下さい。
    CCCC... は何でしょう?(フフフ・・・)
    [  50] 0000000001000000 0200000003000000 0400000005000000 0600000007000000 
     CCCCCCCCCCCCCCCC 0000010001000100 0200010003000100 0400010005000100 
     0600010007000100 CCCCCCCCCCCCCCCC 
    
  4. Function Prototype です。
    pos がポインタで len がダンプするバイト数です。
    BYTE は unsigned char と同じです。
    void Debugx(BYTE *pos, int len);

超初心者のプログラム入門(Win32API C++)