- - PR -
VB.NETで開発したプログラムが、実行時に起こす不可解な現象について(catchできないエラーが発生)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-19 12:30
開発したプログラムを実行すると、理由のわからない現象がでています。
現象 VB.NETで開発したプログラムを、開発環境の「デバッグ」→「開始」で実行して、 立ち上がってきた画面で、なにかのアクションを行うと、異常終了します。 このアクションというのが、 ・コンボボックス、グリッドをクリック(Clickイベントは使っていません) であったり、 ・画面を閉じる であったりさまざまです。 また、すべてのロジックはtry catchで囲って、私たちがコーディングした部分は 必ず専用のエラーメッセージボックスにでるようになっているにもかかわらず、 この落ち方をするときは、VB.NETが出すエラーメッセージボックスに出てしまいます。 (どこで落ちているのかわかりません。) また、この現象は、出たり出なかったりします。再現性が低いです。 この画面を他のVB.NETのインストールされている端末で実行させても発生します。 この画面が他の画面と異なるのは、 ・コード量が多いこと(3万5千行くらいあります) ・タブコントロールを使っています。 (画面にタブコントロールが張ってあって、ボタン、グリッド、コンボボックスなどは すべて、そのコントロールの上に載っています。) ということです。 原因がわからずどうしたらよいか、困っています。 ソースが巨大だとだめなのでしょうか? スレッドなどは使っていません。 なにか、原因や回避方法をご存知の方がいらっしゃいましたら ぜひ、教えていただきたいです。 「うちでも現象でていて、こうやって、しのいでいるよ」など 情報をいただけたらありがたいです。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-12-19 12:50
諸農です。
発生しているのは特定のプログラムでしょうか? それとも、その端末で作成する全部のアプリで発生するのでしょうか? どの段階でその現象が出ますか? 特定のコントロールの貼り付け以降とか、 特定のコードを追加した後からとか。 再現性が低いとのことですので、 処理のログを取るようにしてみてはいかがでしょうか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2005-12-19 12:55
こんにちは。
ここに何て書かれていますか?
どうやって囲っていますか?
だと厳密には全てをキャッチできないですよね? _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2005-12-19 13:30
これは、Application.ThreadException でやって頂きたいですね... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-12-19 14:00
現象は、ひとつのプロジェクトの中の、ひとつの画面でのみ発生しています。 発生するときは、以下の手順で発生しています。 @開発環境から実行させます。(「デバッグ」→「開始」、あるいは、ツールバーの右向き矢印アイコンを押します) Aアプリケーションのログイン画面が表示されます。 ログイン後、該当画面を開くためのボタンを押します。(内部的にはShowDialogで表示しています。) B問題の画面が表示されます。 現象がでないときは、何事もなく処理できます。 現象がでるときは、 ・画面に張り付いているコンボボックスをマウスでクリックした瞬間(コンボボックスにClickイベントのためのメソッドはありません。) だったり、 ・画面に張り付いているTrueDBGridをクリックした瞬間(TrueDBGridにClickイベントのためのメソッドはありません。) だったり、 ・画面で処理を終えて、閉じるボタンを押して画面が消えた瞬間 だったりします。 ありがとうございます。 発生現象を正しく伝えられるためにも、 より詳しい処理のログのメモを取っていかないといけませんね。 | ||||||||||||
|
投稿日時: 2005-12-19 15:02
じゃんぬねっとさんがご指摘されてますが、以下のようにしてハンドルできないエラーも捉えてはどうでしょうか?
※アプリ用 <STAThread()> _ Shared Sub Main() ' ThreadExceptionイベント・ハンドラを登録する AddHandler Application.ThreadException, AddressOf ApplicationThreadException ' UnhandledExceptionイベント・ハンドラを登録する AddHandler Thread.GetDomain().UnhandledException, AddressOf ApplicationUnhandledException Application.Run End Sub ' (Windowsアプリケーション用) Public Shared Sub ApplicationThreadException(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs) ShowErrorMessage(e.Exception, "Application.ThreadExceptionによる例外通知です。") End Sub ' (主にコンソール・アプリケーション用) Public Shared Sub ApplicationUnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) Dim ex As Exception = CType(e.ExceptionObject, Exception) If Not ex Is Nothing Then ShowErrorMessage(ex, "Application.UnhandledExceptionによる例外通知です。") End If End Sub Public Shared Sub ShowErrorMessage(ByVal ex As Exception, ByVal extraMessage As String) Dim ErrMsg As New StringBuilder Dim swFile As StreamWriter ErrMsg.Append(extraMessage & vbCrLf & "――――――――" & _ vbCrLf & vbCrLf & _ "エラーが発生しました。開発元にお知らせください" & _ vbCrLf & vbCrLf & _ "【エラー内容】" & vbCrLf & ex.Message & vbCrLf & vbCrLf & _ "【スタックトレース】" & vbCrLf & ex.StackTrace) MessageBox.Show(ErrMsg.ToString) 'PATH確認 If Directory.Exists(Directory.GetCurrentDirectory & "\log") = False Then Directory.CreateDirectory(Directory.GetCurrentDirectory & "\log") End If Try 'OPEN swFile = New StreamWriter(Directory.GetCurrentDirectory & "\log\" & Date.Now.ToString("yyyyMMdd_HHmmss") & ".log", _ False, System.Text.Encoding.Default) swFile.Write(ErrMsg.ToString) Finally 'CLOSE swFile.Close() End Try Application.Exit() End Sub こんな感じでログファイル化してみてはどーでしょうか? [ メッセージ編集済み 編集者: 雲山 編集日時 2005-12-19 15:04 ] | ||||||||||||
|
投稿日時: 2005-12-19 15:06
この文章からすると十分に再現性があります。 つまり原因がある「はず」です。 オブジェクト変数がどうのこうのというメッセージと予想してみたりします。 コンストラクタ、Load、Closingなんかであるべきものとして記述されているにもかかわらず 中身が無いって言う落ちではないですかね。 | ||||||||||||
|
投稿日時: 2005-12-19 16:13
WindowsAPIやアンマネージドな関数などは使用していませんか?
|