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

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

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

Re[2]: 実行時エラーが出ずデバッグモードにならない(VB.net)


(過去ログ 135 を表示中)

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

■79609 / inTopicNo.1)  実行時エラーが出ずデバッグモードにならない(VB.net)
  
□投稿者/ yoshida (1回)-(2016/04/21(Thu) 15:33:59)

分類:[.NET 全般] 

vbでwindowsフォームアプリケーションを作成していますが、開発中に実行時エラーが表示されず
デバッグモードにもならないという現象が起きており大変困っています。

Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "初期値"
        Label2.Text = "初期値"
        Label3.Text = "初期値"

        Label1.Text = "正常"
        Label2.Text = CDate("ABC")
        Label3.Text = "正常"
    End Sub

End Class

フォームにラベルを3個置いて、このようなプログラムを実行すると、Label2.Text = CDate("ABC")のところで
エラーとなり、デバッグモードになってエラーが表示されるはずなのですが、何事もなかったように
Form1が表示されてしまいます。(ラベルは1が「正常」、2と3は「初期値」となっている)

ブレークポイントを置いて1行ずつ動かした場合、Label2.Text = CDate("ABC")を実行しようとした瞬間に
デバッグモードが終わってしまいフォームが表示されます。

環境としては、Visual Studio 2008と2010が入っていますが、どちらでも同じ現象となっています。

なおビルドして作成されたexeを実行した場合は、ちゃんと実行時エラーが表示されます。

どのような原因が考えられますでしょうか。

引用返信 編集キー/
■79610 / inTopicNo.2)  Re[1]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ ヴァン (26回)-(2016/04/21(Thu) 16:05:40)
こんにちは。

原因ははっきりしていますが、最終的には何がしたいのでしょうか?

> Label2.Text = CDate("ABC")

この部分で例外が発生しています。
例外を捕えたいのか、例外を無くしたいのか。
それによって対策は変わってくるかと思います。


No79609 (yoshida さん) に返信
> vbでwindowsフォームアプリケーションを作成していますが、開発中に実行時エラーが表示されず
> デバッグモードにもならないという現象が起きており大変困っています。


引用返信 編集キー/
■79611 / inTopicNo.3)  Re[2]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ yoshida (2回)-(2016/04/21(Thu) 16:21:28)
説明がわかりにくくてすみません。

通常、Visual StudioでF5を押して実行した場合、エラーが発生すると、例えば
「InvalidCastExceptionはユーザーコードによってハンドルされませんでした。」
というウィンドウが表示され、コードエディタにエラーが発生した箇所が表示されて
実行が停止するはず(だと思っていた)のですが、

エラーのウィンドウも何も表示されないため、エラーが発生しているのがわかりにくく
困っているという状況です。


引用返信 編集キー/
■79612 / inTopicNo.4)  Re[3]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ ito (26回)-(2016/04/21(Thu) 16:30:17)
No79611 (yoshida さん) に返信
> エラーのウィンドウも何も表示されないため、エラーが発生しているのがわかりにくく
> 困っているという状況です。
メニューから、
デバッグ→例外
を選択して、表示されてい「スローされるとき」全てにチェックを入れてください。
「Form1_Load」は、.NET Frameworkから呼ばれているので、おそらくですが、.NET Framework内部でtry-catchされているのでしょう。
つまり、.NET Frameworkにより「ハンドルされている例外」となっていると思います。

引用返信 編集キー/
■79613 / inTopicNo.5)  Re[3]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ 774RR (395回)-(2016/04/21(Thu) 16:35:32)
Form の Load で例外が発生しても catch されないバグっす。
http://programmers.high-way.info/cs/ignore-exception.html
ここんちは VS2008 では正常とあるけど、リンク先の MSDN には VS2008 でも発生とあるです。

自前で catch して Debug.Assert するしかない?

引用返信 編集キー/
■79614 / inTopicNo.6)  Re[1]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ とくま (7回)-(2016/04/21(Thu) 16:48:12)
No79609 (yoshida さん) に返信
色々なところで報告されてますね。当方VB2010で再現します。

以下のサイトでは、
64ビット版のWindowsで開発していると、FormのLoadイベント実行中に例外が発生しても
実行が停止せず、フォームが表示されると書いてありました。
※32ビットではエラー表示されるのか未確認
http://rucio.cocolog-nifty.com/blog/2011/04/post-f125.html

>おそらくですが、.NET Framework内部でtry-catchされているのでしょう。
これって自作のコードで考えるとエラートラップしてメッセージも何も表示しない
。。。つまりエラーを握りつぶしちゃってるって事ですよねぇ。

リンク先の説明のようにShownイベントを使うか、
エラーは発生しているので、Try〜Catchで自作のメッセージを出すか。。。
Loadに書かずNewに書けば、MyApplicationのOnCreateMainFormで止まってくれはします。(VB2010の場合)
引用返信 編集キー/
■79615 / inTopicNo.7)  Re[3]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ 魔界の仮面弁士 (697回)-(2016/04/21(Thu) 16:48:13)
No79611 (yoshida さん) に返信
> 「InvalidCastExceptionはユーザーコードによってハンドルされませんでした。」

64bit 環境でデバッグした場合、Load イベント(あるいは OnLoad メソッド)内の例外を
Visual Studio 側でとらえることができません。Try Catch は可能なのですけれどね。


> エラーのウィンドウも何も表示されないため、エラーが発生しているのがわかりにくく
> 困っているという状況です。

(代案1) 構成マネージャーから、プラットフォームを「x86」にしてみてください。
 そうすれば、InvalidCastException の例外で停止するでしょう。

(代案2) Load の代わりに、Shown やコンストラクタを使うという手もあります。
 これでも停止させられます。(Load とは異なるタイミングで処理されることにはなりますが)
引用返信 編集キー/
■79622 / inTopicNo.8)  Re[2]: 実行時エラーが出ずデバッグモードにならない(VB.net)
□投稿者/ yoshida (3回)-(2016/04/21(Thu) 18:00:47)
コメントいただいた皆様ありがとうございます。

こちらの環境としては
Windows7 Pro 64bitで、VS2008・2010・2013いずれもダメでした。

Loadイベントに限りこのようになるんですね。

とりあえずフォームにInterval=1のTimerを置いて、
LoadイベントではTimer.Enabled=Trueだけを行い、
本来Loadイベントでやりたい内容をTimerイベントに書いてみたらうまくいきました。
(ちょっとかっこ悪いですが…)


いままでこのようになったことがないので(気づいてなかっただけかも?)
かなり焦ってしまいました。

Loadイベントにはあまりコードを書かないほうがいいのかもしれませんね…
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -