描画プログラムのデバッグのしかた

[戻る]
Puppy 2002/04/11(木) 11:20:05
こんにちは Puppyです。

OnPaintの中に記述しているプログラムをステップ実行しながら
うまく描画できているか、ひとつづつ確認したいのですが
画面を最大化していると、描画の様子が確認できません。

VCのデバッグの画面とプログラムの描画の画面を小さくして
2つとも表示させると、ステップ実行しながら描画の様子が
確認できるのですが、ちいさくてよく見えないんですぅ。(T-T;

皆さんはどんなふうにデバッグされていますか。
教えて下さい。m(..)mぺこり

不良PG 2002/04/11(木) 11:29:19
>うまく描画できているか、ひとつづつ確認したいのですが

ひとつづつ描画するようにすれば良いのでは・・
確認したい以外の描画をコメントアウトしておけば一つづつ確認できそうですが・・

そういう事ではない?

Puppy 2002/04/11(木) 11:47:32
不良PGさん こんにちは Puppyです。
昨日はありがとうございました。

>そういう事ではない?

えと、たとえば

for () {
  dc.MoveTo(変数1, 変数2); // dcはデバイスコンテキスト
  dc.LintTo();
}

みたいなループがあって、ステップ実行し
変数の内容を確認しながら、1本1本線がひかれていく様子を画面で
確認したいのです。
このときにデバッグ画面(VC)と開発ソフトの画面が
両方みえていないと、再描画の関係?でうまくいきません。
再描画がくりかえされるからかな?画面が見えなくなる。
(重ならないようにすると、うまくいくけど画面がちっちゃくなる)
説明がヘタですみません。m(..)mぺこり

デバッグはちっちゃい画面でするしかないのでしょうか。(T-T;
皆様はどのように確認していますか?

dairygoods 2002/04/11(木) 12:32:32
> 変数の内容を確認しながら、1本1本線がひかれていく様子を画面で
> 確認したいのです。

ウィンドウを「常に手前に表示」状態にすれば可能です。

常に手前に表示するには、該当するCWndに対して
以下の呼び出しを行います。
(ダイアログならば、OnInitDialog()の中など)

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

不良PG 2002/04/11(木) 12:34:19
>1本1本線がひかれていく様子を画面で確認したいのです。
描画ループにスリープを入れて、

>変数の内容を確認しながら、

確認したい変数の内容を開発ソフトの画面に表示させればよいのでは?

>for () {
>  dc.MoveTo(変数1, 変数2); // dcはデバイスコンテキスト
>  dc.LintTo();
#if _DEBUG
   dc.TextOut(... 変数1 変数2);
   Sleep( 1000 ); //例えば1秒待ち
#endif //_DEBUG
>}

Puppy 2002/04/11(木) 13:30:07
[[解決]]
Puppyです。

dairygoodsさん お返事ありがとうございます。
教わった方法でやってみたのですが、手前に表示されませんでした。
サブクラス化したコントロールだからでしょうか?

不良PGさん お返事ありがとうございます。
途中でとめづらいですが、Sleepでなんとかなりそうです。

ありがとうございました。(*^_^*)

他にも良い方法があれば、ぜひ教えて下さい。

sara 2002/04/11(木) 14:22:16
既に解決しているようですが、こんなデバッグの仕方はいかがでしょうか?
アウトプットウィンドウに座標をTRACEマクロを使って出力しながらデバッグしています。座標
のデバッグの時は、アウトプット以外は全て非表示にして、VCの画面をなるべく小さくします。
後はファンクションキーでステップ実行などをしていきます。(ツールバーも邪魔ですから非表
示にします。)

こうすると、デバッグ実行終了後にも座標の数値を確認できるので非常に便利です。

(例)プリプロセッサの定義に DEBUG_DRAWを追加します
for (i=0; i<100; i++) {
#ifdef DEBUG_DRAW
  TRACE3("i=%d: 変数1=%d, 変数2=%d\n", i, var1, var2 );
#endif
  dc.MoveTo(var1, var2); // dcはデバイスコンテキスト
  dc.LintTo();
  // 何らかの処理
}
この部分のデバッグの必要なくなって邪魔になったら、プリプロセッサの定義から DEBUG_DRAW
を外します。

dairygoods 2002/04/11(木) 14:27:25
> 教わった方法でやってみたのですが、手前に表示されませんでした。
> サブクラス化したコントロールだからでしょうか?

コントロールだけが手前に表示されるわけではありません。
ダイアログウィンドウ自体を手前に表示するようにします。

2002/04/11(木) 14:45:39
リモートデバッグ、これ最強。

いもちぃ 2002/04/11(木) 15:12:57
私はダブルディスプレイでやってます。(だめ?)
あと、dbmon.exeってのもあります。

さらに昔はBEEPで変数内容を表現するプログラムを
組んでいました。(泣)
MSXの旧き良き時代の話ですが。

com-a 2002/04/11(木) 15:55:40
ここでは初めまして。com-aと申します。

> 私はダブルディスプレイでやってます。(だめ?)
> あと、dbmon.exeってのもあります。

こういうパターンで良いなら、仮想デスクトップでもOKかも。


> さらに昔はBEEPで変数内容を表現するプログラムを
> 組んでいました。(泣)
> MSXの旧き良き時代の話ですが。

仲間ですね。(^ ^;)
場合によっては、PLAYやSOUNDやCOLORも使ってました。(笑)

Puppy 2002/04/11(木) 16:26:15
Puppyです。

いつのまにか、たくさんお返事が・・・
皆様、たくさんのお返事ありがとうございます。
いろいろ試してみたいと思います。

>私はダブルディスプレイでやってます。(だめ?)
うらやましいですぅ。(T-T;

昨日やっと先輩から、パソコンを一人で使わせてもらえるように
なったばっかりなんですぅ。もちろん中古品でーす。(T-T;
ダブルディスプレイになるまでは10年くらいかかりそうでーす。(笑)
(多分、先輩に10年はやいってゆわれますから。)

皆様、ありがとうございました。m(..)mぺこり

古いスレッドには追加発言できません。