C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Paintイベントのデバッグ


(過去ログ 105 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■62597 / inTopicNo.1)  Paintイベントのデバッグ
  
□投稿者/ HANA (1回)-(2011/10/20(Thu) 18:28:19)

分類:[.NET 全般] 

Visual Studio 2010にバージョンアップをしたところ、
Picture Boxなどの、Paintイベントの中に書いたソースコードにエラーがあった場合、
勝手に例外処理され、大きな赤いバッテンが表示されるようになりました。

エラーがあっても、止まってくれないので、Paintイベント中のどこのコードに不具合があるのか分からず、
デバッグがしにくくてなりません。

どこかに設定があるのでしょうか?
良い解決方法を、どなたか、御存知ないでしょうか?

既出・常識でしたら、申し訳ありません。
よろしくお願いします。
引用返信 編集キー/
■62598 / inTopicNo.2)  Re[1]: Paintイベントのデバッグ
□投稿者/ ヴァン (96回)-(2011/10/20(Thu) 19:48:29)
こんにちは。

No62597 (HANA さん) に返信
> Visual Studio 2010にバージョンアップをしたところ、

バージョンアップ前はそのようなことは無かったのでしょうか?

> Picture Boxなどの、Paintイベントの中に書いたソースコードにエラーがあった場合、

ソースコードにエラーがある場合はビルドが通らず、実行できないと思いますが。

> エラーがあっても、止まってくれないので、Paintイベント中のどこのコードに不具合があるのか分からず、
> デバッグがしにくくてなりません。

ブレークポイントやステップ実行は使っていますか?


引用返信 編集キー/
■62599 / inTopicNo.3)  Re[2]: Paintイベントのデバッグ
□投稿者/ HANA (2回)-(2011/10/20(Thu) 20:39:27)
No62598 (ヴァン さん)

こんにちは。
返答ありがとうございます。

以前のバージョンでは、このようなことは、なかったと思います。
ちゃんと、デバッグ実行時、エラー箇所で止まっていました。
もっとも、Paintイベントを使う機会があまりなかったので、バージョンアップがきっかけかはわかりません。
みなさんは、このようなことは無いのでしょうか?

ブレークポイント・ステップ実行・コンソール出力を使ってのデバッグでは、きりがありません。
コンパイル→実行を、とにかく沢山やらなきゃいけなくなります。
描画部分のソースが膨大なので。。。

実行中にエラーが発生するというのは、たとえば。
0での除算、キャストの失敗や、インスタンスが参照されていない参照型変数(null)のメソッドやプロパティに
アクセスした場合など、多々あると思います。

なので、ビルドは通ります。
引用返信 編集キー/
■62600 / inTopicNo.4)  Re[3]: Paintイベントのデバッグ
□投稿者/ HANA (3回)-(2011/10/20(Thu) 20:58:08)
サンプルソースを載せます。

pictureBox1が、フォーム上に接地し、以下のようなコードを書いたとします。

----------------------------------

Form form = null;

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
//ここで、「インスタンスが参照されていません」と、エラーが出て、
//止まって(そして、強制終了)欲しいところですが、
//アプリケーションは落ちること無く、pictureBox1には、大きな赤いバッテン
//が描画される。
form.Text = "test";
}

-----------------------------------


みなさんは、このような挙動にはならないのですか?

上記のようなシンプルなコードなら、辛くはないですが、
Paintイベントは、わりとリアルタイムな処理なので、
処理が複雑になってくると、
エラーの再現性がつかめなくなり、苦労します。
引用返信 編集キー/
■62602 / inTopicNo.5)  Re[4]: Paintイベントのデバッグ
□投稿者/ shu (1050回)-(2011/10/20(Thu) 22:00:55)
No62600 (HANA さん) に返信

とりあえずCatchしてExceptionのStackTraceをテキストにでもはき出してみるというのはどうでしょう?
引用返信 編集キー/
■62610 / inTopicNo.6)  Re[5]: Paintイベントのデバッグ
□投稿者/ todo (167回)-(2011/10/21(Fri) 12:27:58)
No62602 (shu さん) に返信
> ■No62600 (HANA さん) に返信
>
> とりあえずCatchしてExceptionのStackTraceをテキストにでもはき出してみるというのはどうでしょう?
引用返信 編集キー/
■62611 / inTopicNo.7)  Re[6]: Paintイベントのデバッグ
□投稿者/ todo (168回)-(2011/10/21(Fri) 12:29:11)
>どこかに設定があるのでしょうか?

#試してませんが、

VisualStudioのメニューバー
デバッグ(D)→例外(X)

System.Windows.Forms の「スローされるとき」をONにするとか。
引用返信 編集キー/
■62624 / inTopicNo.8)  Re[7]: Paintイベントのデバッグ
□投稿者/ HANA (4回)-(2011/10/22(Sat) 11:14:32)
shuさん

todoさん

返信ありがとうございます。

try catchで、例外を取得して、トレースするという方法で、落ち着きました。
上の例で、書くなら、こんな感じ

---------------------------------------------

Form form = null;

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
try
{
form.Text = "test";
}
catch (Exception err)
{
Console.WriteLine("---------------------------------");
Console.WriteLine(err);
}
}

---------------------------------------------------

いちいち、行数でソースを追わなきゃいけないのと、ローカル変数をそのまま覗けないのが、
あれですが、だいぶ作業が楽になりました。
2回目以降の実行で、問題の箇所の直前にブレークを置けば、上記の問題も解決できますし、
果てしない数→2回に、実行回数が減りました。

ありがとうございました。


憶測ですが、「例外がスローされない」のではなく、「Paintイベント内で、勝手にtry Catch処理されてしまう。」
という、流れなのではないでしょうか。
PictureBoxの、もはや仕様だと。。。

これは、かなりの改悪ですですね。
Microsoftめ、何を考えているのやら。

なにはともあれ、ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -