1 Reply Latest reply: Nov 3, 2011 6:17 PM by Takashi Matsuoka RSS

    ODP.NETでハンドルされない例外を起すと、アプリケーションが消滅する。

    889828
      環境:ODP.NET 11g  WinXP VisualStudio 2005 C#2.0

      いつもお世話になっております。
      上記環境で下記のコードを書くと、
      アプリケーションが跡形もなく消滅してしまいます。

      ハンドルされていない例外が発生したときは、
      AppDomain.CurrentDomain.UnhandledExceptionなどを使って
      ロギングしたいのですが、
      オラクルにリンクしたアプリケーションはそれができなくなってしまいます。
      例外を取り出せる良い方法はないでしょうか。

      下記のコードではフォーム上で例外が発生していますので、
      何とか例外をとることができますが、
      別スレッド上で落ちるときに問題になります。

      もちろん、自分でTryCatchを入れるのが基本ですが、
      すでにリリースしてしまっているソフトで問題が起こっており、
      その調査のための質問になります。
      よろしくお願い致します。


      using Oracle.DataAccess.Client;

      private void Form2_Load( object sender, EventArgs e )
      {
           // オラクルの処理はこれだけ。これを書かなければ問題ない。
           OracleConnection connection = new OracleConnection();

           // ハンドルされていない例外を発生させる。
           object destroyer = null;
           destroyer.GetType();

      }
        • 1. Re: ODP.NETでハンドルされない例外を起すと、アプリケーションが消滅する。
          Takashi Matsuoka
          直接的な回答ではありませんが...
          わたしの手元では再現しませんでした。
          問題なく、CurrentDomain.UnhandledExceptionを通ります。
          (Visual Studioにブレークを設定して、停止することで確認しました。)

          WindowsXP SP3
          ODP.NET 10g(手元が10gだったので。)
          Visual Studio 2005 Windowsアプリケーション

          public Form1()
          {
          InitializeComponent();

          AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
          }

          void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
          {
          throw new Exception("The method or operation is not implemented.");
          }

          private void Form1_Load(object sender, EventArgs e)
          {
          OracleConnection connection = new OracleConnection();

          object destroyer = null;
          destroyer.GetType();
          }