none
UAE(Unrecoverable Application Error)メッセージから、不具合を特定する方法 RRS feed

  • 質問

  • こんにちは。C#で開発されている皆さん。

     

    気をつけてTry Catchをソースコードに散りばめてみても、UAEメッセージが表示されてしまうケースで、エンドユーザーからお怒りのサポート要請を頂くことがシバシバあります。

     

    協力的なエンドユーザーであれば、その状況に至ったまでの経緯や、エラートラップを張ったデバッグ用ソフトの試用などお願いできるのですが、すべてがそういう訳ではありません。

     

    困ったことに、非協力的なエンドユーザーさん程、解決を急かされてしまいます。

     

    今回は、エンドユーザー先で表示されてしまった、UAE、いわいる”致命的なアプリケーションエラー”メッセージから、なんとか問題の糸口を見出そうという試みに関して、みなさんからヒントを頂こうとスレッドを立ち上げました。

     

    winlogon.exe - Application Error

    0x7c801761 アドレスで、0x000000 を書きこみました。

    はい。これだけです。トレース情報もなにもありません。

     

    幸い、デバッグモードでビルドしたものをリリースしており、

    リリースした状態のままデバッガを動かすことが出来ます。

    デバッガを起動し、モジュール一覧を表示すると、

    0x7C610000-0x7C808000 に system.windows.Forms.dllがあります。

     

     

    ・C#で、保護領域に書き込む可能性があるとすれば、どんなコードなのか

    ・このアドレスは具体的に、Windows.Forms名前空間のどのクラスの、どのメンバーに関するものなのかを知る方法

     

     

    上の2点について、ヒントをご存じの方、ぜひコメントをよろしくお願いします。

    2008年7月14日 4:13

回答

  •  Microcircus さんからの引用

    気をつけてTry Catchをソースコードに散りばめてみても、UAEメッセージが表示されてしまうケースで、エンドユーザーからお怒りのサポート要請を頂くことがシバシバあります。

    気になったのですが、try catchで全ての例外をキャッチしたり、無視している訳ではありませんよね?

    よく分からない例外までcatchしてなかったことにすると、たとえ落ちなくても他のところで不整合が生じて、結局おかしな動きをする可能性があるので。

     

     Microcircus さんからの引用

    ・C#で、保護領域に書き込む可能性があるとすれば、どんなコードなのか

    IntPtr型絡みやMashalクラスを使った操作であったり、APIの呼び出しであったり、数えるとキリはないかと。

    故に「どんなコードなのか」と質問をして、適切な回答はできません。

     

     Microcircus さんからの引用

    ・このアドレスは具体的に、Windows.Forms名前空間のどのクラスの、どのメンバーに関するものなのかを知る方法

    デバッグシンボルを読めば分かるかもしれません。

    http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx

    2008年7月14日 5:53
    モデレータ
  •  Microcircus さんからの引用

    ・C#で、保護領域に書き込む可能性があるとすれば、どんなコードなのか

    可能性はC#のみのコードでは限りなく低いと思います。

    COMやWin32 APIを実行していればその付近が怪しいでしょう。

     

     Microcircus さんからの引用

    ・このアドレスは具体的に、Windows.Forms名前空間のどのクラスの、どのメンバーに関するものなのかを知る方法

    現象の発生したPCが2000/XPとするとワトソン博士がダンプファイルを生成している可能性があります。

    ダンプファイルを入手してWinDbgで見てみれば分かるかもしれません。

    「ファイル名を指定して実行」→「drwtsn32」でワトソン博士のGUIが起動するのでログ・ダンプのファイルパスを調べファイルが無いか確認してみてください。

    ※Vistaになってワトソン博士はいなくなりました

    2008年7月14日 12:17

すべての返信

  •  Microcircus さんからの引用

    気をつけてTry Catchをソースコードに散りばめてみても、UAEメッセージが表示されてしまうケースで、エンドユーザーからお怒りのサポート要請を頂くことがシバシバあります。

    気になったのですが、try catchで全ての例外をキャッチしたり、無視している訳ではありませんよね?

    よく分からない例外までcatchしてなかったことにすると、たとえ落ちなくても他のところで不整合が生じて、結局おかしな動きをする可能性があるので。

     

     Microcircus さんからの引用

    ・C#で、保護領域に書き込む可能性があるとすれば、どんなコードなのか

    IntPtr型絡みやMashalクラスを使った操作であったり、APIの呼び出しであったり、数えるとキリはないかと。

    故に「どんなコードなのか」と質問をして、適切な回答はできません。

     

     Microcircus さんからの引用

    ・このアドレスは具体的に、Windows.Forms名前空間のどのクラスの、どのメンバーに関するものなのかを知る方法

    デバッグシンボルを読めば分かるかもしれません。

    http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx

    2008年7月14日 5:53
    モデレータ
  •  Microcircus さんからの引用

    ・C#で、保護領域に書き込む可能性があるとすれば、どんなコードなのか

    可能性はC#のみのコードでは限りなく低いと思います。

    COMやWin32 APIを実行していればその付近が怪しいでしょう。

     

     Microcircus さんからの引用

    ・このアドレスは具体的に、Windows.Forms名前空間のどのクラスの、どのメンバーに関するものなのかを知る方法

    現象の発生したPCが2000/XPとするとワトソン博士がダンプファイルを生成している可能性があります。

    ダンプファイルを入手してWinDbgで見てみれば分かるかもしれません。

    「ファイル名を指定して実行」→「drwtsn32」でワトソン博士のGUIが起動するのでログ・ダンプのファイルパスを調べファイルが無いか確認してみてください。

    ※Vistaになってワトソン博士はいなくなりました

    2008年7月14日 12:17
  • こんにちは。中川俊輔 です。

     

    Azuleanさん、C.Johnさん、回答ありがとうございます。

     

    Microcircusさん、フォーラムのご利用ありがとうございます。

    問題は解決しましたでしょうか?

    有用な情報と思われたため、

    Azuleanさん、C.Johnさんの回答へ回答済みチェックをつけさせていただきました。

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    Microcircusさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年7月24日 9:46