自分の入力で変数が変わるときのデバッガ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山中

自分の入力で変数が変わるときのデバッガ

#1

投稿記事 by 山中 » 13年前

知りたいことがあります。よろしければ回答をよろしくお願いします。
環境はWIndows7、VC++2008EEです。C言語初心者です。

まず、たとえとして、ゲームプログラミングの館のコードを貼らせてもらいます。

コード:

#include "DxLib.h"

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
        char tmpKey[256]; // 現在のキーの入力状態を格納する
        GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
        for( int i=0; i<256; i++ ){ 
                if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
                        Key[i]++;     // 加算
                } else {              // 押されていなければ
                        Key[i] = 0;   // 0にする
                }
        }
        return 0;
}

// メニュー項目の表示に必要な構造体を用意する
typedef struct{
        int x, y;       // 座標格納用変数
        char name[128]; // 項目名格納用変数
} MenuElement_t ;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

        // メニュー項目要素を5つ作る
        MenuElement_t MenuElement[5]={
                {  100, 100, "ゲームスタート" }, // タグの中身の順番で格納される。xに80が、yに100が、nameに"ゲームスタート"が
                { 100, 150, "おまけ" },
                { 100, 200, "ヘルプ" },
                { 100, 250, "コンフィグ" },
                { 100, 300, "ゲーム終了" },
        };
        int SelectNum = 0; // 現在の選択番号

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キー更新)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){

                // 計算フェーズ 

                if( Key[ KEY_INPUT_DOWN ] == 1 ){ // 下キーが押された瞬間だけ処理

                        SelectNum = ( SelectNum + 1 ) % 5; // 現在の選択項目を一つ下にずらす(ループする)

                        for( int i=0; i<5; i++ ){              // メニュー項目数である5個ループ処理
                                if( i == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
                                        MenuElement[i].x = 80; // 座標を80にする
                                } else {                       // 今処理しているのが、選択番号以外なら
                                        MenuElement[i].x = 100;// 座標を100にする
                                }
                        }
                }

                // 描画フェーズ

                for( int i=0; i<5; i++ ){ // メニュー項目を描画
                        DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name );
                }

        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
}
うまく質問するのが難しいのですが、SelectNumのような、こちらの入力により変わる変数の動きを最後まで(SelectNumが”ゲーム終了”に値するまで)追いたいのですが、計算フェーズのfor文のあたりにブレークポイントをおいて値を調べると、
一度下キーを押しただけで実行画面(ウィンドウ)が消えてしまい、結局SelectNumの値は1までしか調べることができないのです。前述のように、最後までこういった場合の変数の値の変化をみたいときはどのようにすればよいのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 自分の入力で変数が変わるときのデバッガ

#2

投稿記事 by h2so5 » 13年前

ブレークポイントで実行が停止しても、F5キーを押せば継続することができます。
数値を監視したい時はブレークポイントではなくてOutputDebugStringやprintfDxを使ったほうが便利です。

nil
記事: 428
登録日時: 14年前

Re: 自分の入力で変数が変わるときのデバッガ

#3

投稿記事 by nil » 13年前

printfデバッグで常に画面に表示し続けると良いです。
DXライブラリではコンソール画面を表示できないのでprintfDxですね。
clsDxで簡易画面出力をクリアできます。

山中

Re: 自分の入力で変数が変わるときのデバッガ

#4

投稿記事 by 山中 » 13年前

ご回答ありがとうございます。
お二方から教えていただいた方法でやってみます。
助かりました。
今回はすばやく回答していただき、ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る