2

この問題についての支援に心から感謝していることを前もって述べさせていただきます。

C#(2.0)アプリケーションがあります。これは、コマンドラインパラメータとして渡されるXMLファイルに基づいてストアドプロシージャを実行する比較的単純なアプリケーションです。

さまざまなストアドプロシージャを呼び出すためのツールとして使用します。このアプリケーションはいくつかのロギングを行い、ほとんどの場合非常にうまく機能します。

アプリケーションは、XMLファイルからストアドプロシージャの名前とパラメータを読み取ります。接続文字列とSQLコマンドオブジェクト(System.Data.SqlClient.SqlCommand)を設定します。

次に、ExecuteReaderメソッドを使用してストアドプロシージャを実行します。

残念ながら、このアプリケーションで次のエラーが発生する場合があります。

    “Application popup: StoredProcLauncher.exe - Application Error : The instruction
 at "0x7c82c912" referenced memory at "0x00000000". The memory could not be "read”

このエラーは複数のサーバーで発生しているため、コードの問題である必要があります。

本番サーバーが特定の数をロールすると、このメモリエラーが発生するようです。

問題は、開発時にこの問題が発生しないことです。複製できないので行き詰まります。

このエラーをシミュレートする方法はありますか?このエラーを再現するために、ローカルPCのメモリを何らかの方法でいっぱいにすることはできますか?

このようなエラーが発生する可能性のある一般的なコーディングの問題を知っている人はいますか?

誰かが私が借りることができるロープを持っていますか?

4

2 に答える 2

3

これを行う 1 つの方法は、問題のあるコードを try catch ブロックでラップし、スタック トレースとエラー メッセージを Windows アプリケーション イベント ログ、テキスト ファイル、電子メールなどに書き込むことです。

これにより、いくつかの行番号と追加情報が得られます。

また、デバッグ シンボルを取得できるように、これをデバッグ モードでデプロイするか、少なくとも .pdb ファイルをアプリケーション exe/dll と共にコピーする必要がある場合があることに注意してください。それがどのように機能するのか頭の中で思い出すことはできませんが、リリースモードでデプロイすると、貴重なデバッグ情報が失われる可能性があると思います.

于 2013-03-15T18:21:08.123 に答える
2

「0x7c82c912」の命令が「0x00000000」のメモリを参照した

これはアクセス違反です:

アクセス違反は、アンマネージ コードまたはアンセーフ コードで、割り当てられていないメモリまたはアクセス権のないメモリに対して読み取りまたは書き込みを行おうとすると発生します。これは通常、ポインターの値が正しくないために発生します。

プログラムにアンマネージ/アンセーフ コードがあるのはなぜですか? あなたが説明したことを行うために、ネイティブコードは必要ありません。

残念ながら、コードはクラッシュします。今はネイティブ コードの呼び出しがどのようになっているのかを考えるときではありません。この問題を解決するには、ダンプを取得して分析する必要があります。アプリケーションのクラッシュ ダンプの取得を参照してください。breakpadなど、これに特化したツールがあります。crittercism.comAirBrakeなど、アプリから生成されたクラッシュを収集して追跡するのに役立つサービスもあります。自分用に作成して、bugcollect.comで公開しました。

于 2013-03-15T18:28:35.043 に答える