描画プログラムのデバッグのしかた – プログラミング – Home

描画プログラムのデバッグのしかた
 
通知
すべてクリア

[解決済] 描画プログラムのデバッグのしかた


Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

こんにちは Puppyです。

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

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

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


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>うまく描画できているか、ひとつづつ確認したいのですが

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

そういう事ではない?


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

不良PGさん こんにちは Puppyです。
昨日はありがとうございました。

>そういう事ではない?

えと、たとえば

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

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

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 変数の内容を確認しながら、1本1本線がひかれていく様子を画面で
> 確認したいのです。

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

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

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


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>1本1本線がひかれていく様子を画面で確認したいのです。
描画ループにスリープを入れて、

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

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

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


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。

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

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

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

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


返信引用
sara
 sara
(@sara)
ゲスト
結合: 23年前
投稿: 99
 

既に解決しているようですが、こんなデバッグの仕方はいかがでしょうか?
アウトプットウィンドウに座標を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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

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

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


返信引用
あ
 あ
(@あ)
ゲスト
結合: 23年前
投稿: 47
 

リモートデバッグ、これ最強。


返信引用
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

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

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


返信引用
com-a
 com-a
(@com-a)
ゲスト
結合: 23年前
投稿: 11
 

ここでは初めまして。com-aと申します。

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

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

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

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


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました