最近VCでwin32API Applicationを作り始めたのですが
イベントに対する挙動をチェックしたいのですが方法がわかりません。
今まではConsoleプログラムだけなのでプログラムが動かなかった場合、どこまで動いているのかprintfで
チェックしていたのですがwindowsプログラムの場合どうすればそのような動作チェックができるのでしょうか。
プログラム自体はwaveIn、waveOut系を使った録音・再生するだけのプログラムです。
具体的なバグは録音終了を表すMM_WIM_DATAメッセージが
送られてきた場合に再生ボタンを使用可したいのですが
設定した録音時間の3秒をすぎても使用可能になりません。
デバッグ方法がわかればMM_WIM_DATAが本当に行われているのか、
行われていた場合どこでとまっているのか、がわかると思うので教えて頂きたいです。
【開発環境】
環境:VC++6.0ProffessionalEditon
OS:Windows2000
【その他】
C言語の知識は入門書を一通り理解できる程度。
リソースファイルは使用しておりません。
No.3ベストアンサー
- 回答日時:
こんにちわ。
私も処理のポイント、ポイントでログを採取しながらデバッグを行っていました。
先ずは、printf のように可変の引数を取れる関数を作成して、その中で
特定のファイルにログを採取するようにしておきます。
→ 仮に、TraceLog と言う関数とします。
次に、共通のinclude ファイルに以下のマクロを定義しておきます。
----------------------
#ifdef_DEBUG
#defineDeB(p)p
#else
#defineDeB(p)
#endif
----------------------
後はプログラムのポイント、ポイントで以下のようなログを埋め込んで行きます。
func1(long *p1, char *p2)
{
DeB(TraceLog("func1 debug start!! p1=%x p2=%s\n", p1, p2));
: 実際のプログラム
:
DeB(TraceLog("func1 debug end. rinf=%d\n", rinf);
return(rinf);
}
この状態で、Debug で (_DEBUG マクロを有効にして) コンパイルを行えば
トレースが有効になるのでデバッグのための情報を採取できます。
実際の運用時には、Release で (_DEBUG マクロを無効にして) コンパイルを
行うので、トレースは採取されませんし、デバッグ文自体がNOP になるので
性能にも影響を与えません。
以上のようにしておくと、プログラムの途中で、#ifdef ~ #endif を記述
する必要がなくなるので、プログラムの可読性も向上します。
この回答への補足
お礼を書いた後ですが・・・
バグ元はだいたい見当がついたのでそれについての
質問を新規に投稿するのでよろしければご回答ください。
(補足に書くべきか迷いましたがよろしくお願いいたします。)
#ifdef等の知識がなかったので最初はわかりませんでしたが調べてわかりました。
例を挙げての丁寧な回答ありがとうございました。
大変参考になりました。
No.2
- 回答日時:
まず、メニューの[ビルド]の[アクティブな構成の設定]を[Debug]にします。
次に、左下のところに、[Class][Resource][File]のタブがあるので、[File]をクリックし、[SourceFile]のフォルダをクリックし、その中から、自分の作ったソース、ファイルを選択します。
次に、プログラムの止めたい、ところにカーソルを置き、[F9]キーを押します。
そうすると、その行の左端に、●が付きます。もう一度[F9]キーを押すと解除されます。
次に、[F5]キーを押すと、ビルドしますか?とでるので、[はい]を押します。
そうすると、ビルド(コンパイル)されプログラムが実行され、●のところで、右矢印が出て、止まるはずです。止まらなければ、そこは、実行されていないことになります。
止まったら、自分の見たい変数の上にマウスカーソルをもっていけば、値を見ることができます。
No.1
- 回答日時:
デバッグ用のあるファイルを作成し、そのファイルが存在すれば、
そのファイルに変数などの内容を出力してあげればいいでしょう。
で、実際、リリースするときは、そのファイルをつけなければいいだけですからね。
また、不具合が発生した場合は、そのファイルを作成してもらい、
そのファイルの内容でデバッグできれば、一石二鳥です。
イベントの発生を受け付ける箇所にログ出力をつければいいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
exeファイルをホームページ上で...
-
jarファイル実行時の環境変数の...
-
a.outはどこへ?
-
SWTとSwingの違い
-
exeファイルを作成できるプログ...
-
c/c++ ビルドしたにもかかわら...
-
python matplotlibで作ったグラ...
-
htaファイルが実行されません
-
VC++から引数付きexeファイルの...
-
Windows10 PW有のzipフォルダ内...
-
どんなプログラムを書いても指...
-
C言語初心者の質問失礼します。
-
マイクラでPythonのプログラミ...
-
VB.NETでActiveX(OCXファイル)作成
-
VBSで指定行に挿入
-
C++Builder 6のOpenDialogでフ...
-
ファイル名の先頭にアンダース...
-
アドレスバーの横にアイコンを...
-
動画ファイルの詳細情報について
-
エクセルVBA Dir途中で止まる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
OLE又はDDEを使うVISUAL BESIC...
-
JavaScriptでコマンドプ...
-
VBAで他のプログラムが起動して...
-
VC++から引数付きexeファイルの...
-
実行ファイルと実行モジュール...
-
コンポーネント`MSCOMM32.cox'...
-
LINK : fatal error LNK1104に...
-
VC++での外部プログラムの実行
-
c/c++ ビルドしたにもかかわら...
-
WScript.Echo と msgbox
-
VBAでMP3を鳴らしたい
-
vbsで起動したexeを終了させる方法
-
htaファイルが実行されません
-
eclipseで作ったプログラムを他...
-
VbscriptにてTeraterm マクロを...
-
コマンドプロンプトで外のexeや...
-
jarファイルとjava.exeの関連付...
-
exeファイルをすぐに終了させな...
-
64bit環境で32bitのodbc参照
おすすめ情報