問題タブ [access-violation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Uncatchable AccessViolationException
私は必死に近づいています.. C# とかなりの p/Invoking を使用して、Windows Mobile 6.1 用のフィールド サービス アプリケーションを開発しています。(50個くらいのネイティブ関数を参照していると思います)
通常の状況では、これは問題なく行われますが、GC に負荷をかけ始めると、厄介な 0xC0000005 エラーが発生します。魔女は捕まえられないようです。私のテストでは、ダイアログ フォームをすばやく閉じたり開いたりしています (フォームはネイティブ関数を使用していましたが、テストのためにこれらをコメント アウトしました)。私のアプリケーションのエラー。
私のコードは try-catch を使用Application.Run(masterForm);
してイベントにフックしCurrentDomain.UnhandledException
ますが、アプリケーションは依然としてクラッシュします。デバッガーをアタッチしても、例外が発生すると、ビジュアルスタジオは「デバイスへのリモート接続が失われました」と言うだけです..
管理された環境で例外をキャッチできなかったため、Error Reporter のログ ファイルを調べてみました。しかし、これは意味がありません。エラーについて唯一一貫しているのは、エラーが発生したアプリケーションです。
アプリケーションが発生するスレッドは不明です。エラーが発生するモジュールは時々異なります (application.exe、WS2.dll、netcfagl3_5.dll、および mscoree3_5.dll を見たことがあります)。エラー コードもわかりません。常に同じではありません。(ほとんどの場合は 0xC0000005 ですが、0X80000002 エラーも見たことがあります。これは最初のバイトを説明する警告ですか?)
バグトラップを使用してデバッグを試みましたが、奇妙なことに、これは同じエラー コード (0xC0000005) でクラッシュします。Visual Studioでkdmpファイルを開こうとしましたが、エラーが発生したときに逆アセンブラーコードしか表示されないため、これを理解できないようです(適切な.pbbファイルがない限り、. 't)。WinDbg についても同様です。
長い話を簡単に言うと、率直に言って、このエラーをどこで探すべきかについての手がかりが1つもありません。いくつかのコードを提供できてうれしいですが、現時点ではどの部分を提供すればよいかわかりません..
どんな助けでも大歓迎です!
[2010 年 5 月 3 日編集]
Hans へのコメントでわかるように、すべての P/Invokes のコメントを外した後、プログラム全体を再テストしましたが、問題は解決しませんでした。できるだけ少ないコードでエラーを再現しようとしましたが、最終的にマルチスレッド アクセスがすべての問題を引き起こしているようです。
私のアプリケーションには、指/フリックスクロールリストとして機能するユーザーコントロールがあります。このコントロールでは、リスト内の各項目のビットマップをキャンバスとして使用します。このキャンバスでの描画は別のスレッドで処理され、このスレッドを無効にすると、エラーが消えたように見えます..これについてさらにテストを行い、結果をここに投稿します.
c++ - ソフトウェア製品はアクセス違反をどのように処理する必要がありますか
私たちはc++のソフトウェア製品を持っていますが、コンパイラに関する文書化された問題のために、欠陥のあるコードが生成されます(はい、それ自体がひどいことはわかっています)。これは他のバグの中でも特に、アクセス違反がスローされる原因になります。
これに対する私たちの対応は、エラーをキャッチして実行を継続することです。
私の質問は、これは責任あるアプローチですか?非常に悲惨なことに失敗したときにアプリケーションを稼働させるのは責任がありますか?ユーザーに警告して死ぬほうが責任がありますか?
編集:
例外を処理しないようにすることの議論の1つは、アクセス違反は、プログラムが害を及ぼすことを防いだことを示しており、おそらくどちらも行っていないことを示しています。それを買うかどうかはわかりません。これについて何か意見はありますか?
visual-studio-2008 - VS2008 C++ MFC アクセス違反は、デバッグ モードをステップ実行するときにのみ発生します。
狂ってる。それは私のメイン プロジェクトで発生し始めたので、それを再現するために小さなサンプルの新しいプロジェクトを作成しました。
問題があれば、これを Win7x64 で実行しています。VS2008 SP1。
ここに行きます。ボタン付きの小さなダイアログ アプリを作成します。そのボタンのハンドラー関数にブレークポイントを配置します。ボタン ハンドラー関数は次のようになります。
ボタンをクリックし、ブレークポイントにヒットします。F10 キーを押して、「TestProject.exe の 0x0398f77b で最初の例外が発生しました: 0xC0000005: アクセス違反です。」
中断するか続行するかを選択できます。続けると、「ファーストチャンス」だけでなく、もう一度ヒットします。はい、Debug->Exceptions dlg でその例外をチェックしました。
ブレークすると、コール スタックはブレークポイントがある行を表示するだけです。もう一度F10を押すと、再び例外が発生しますが、コールスタックが _AfxDispatchCmdMsg() 関数に表示され、元の OnBnClickedButton1() がコールスタックになくなりました。
ブレークポイントをどこに置くかは問題ではありません。
F10 の代わりに F5 を続ければ、正常に動作します。
ここで.. リリース バージョンをビルドしてデバッグ モードで実行すると、ブレークポイントにヒットし、すべてのポインター、変数値は正常に見えます。F10、そしてこれらはゴミになります。this ポインターはゼロになりました。m_csHello は現在
ただし、リリース モードでは、例外はキャッチされず、すべて正常に実行されます。「hello World」という文字列がダイアログ ボックスに表示されます。
過去 1 日か 2 日の間に、IT 部門によって何らかのパッチが私のボックスにインストールされたかどうかを確認するための問い合わせをしました。これは 2 日前には発生していませんでした。
どう思いますか?VS2008 は破損していますか?
ありがとう。
編集:追加情報。x64 プラットフォームをビルド/デバッグする場合、これは発生しません。Win32専用。
また、パッケージに含まれている VS2008 のすべてのホットフィックス/セキュリティ アップデートも確認しました。彼らです
最後に、過去 2 ~ 3 週間更新されていない別のマシンにプロジェクトを配置しました。そこでは動作し、これらと同じVSアップデートがインストールされています。
また、この投稿の目的のためにステップ オーバーされているコードを変更しました。.. これは単純な整数の代入であり、MFC は関与しません。
現在、VS2008 を再インストール中です。
vb6 - VB6 から .NET BackgroundWorker を使用すると AccessViolationException で失敗する
次の MSDN の例は、VB6 から .NET BackgroundWorker を使用する方法を示すことを約束していますが、AccessViolationException で失敗します。唯一の回避策は、VB6 コードを P コードとしてコンパイルすることですが、これは実行可能なオプションではありません。
http://msdn.microsoft.com/en-us/library/aa719109(VS.71).aspx
VB6 コードを P コードとしてコンパイルせずに動作するように例を修正するにはどうすればよいですか?
c++ - アクセス違反
私はC++またはCでさえ関数をNOPする方法を学んでいますが、それについてのオンラインチュートリアルはほとんどありません。私はここ数時間グーグルをしていて、行き詰まっています。これが私のコードです。
これは、私が命を失うのを防ぐ3バイトの長さのDEC関数をNOPすることを想定しています。ただし、試してみるたびに、ハックがクラッシュし、アクセス違反があったと表示されます。私は理由を調べようとしました、そしてそれらのほとんどは私が書いている場所のサイズと私がコピーしているものを扱っていました。そうでなければ、私にはまったくわかりません。どんな助けでもいいでしょう。ゲームはGunRoarで、ベースアドレス「0x409A7E」はDEC関数がある場所です。
c++ - Windowsのペイントイベントでの例外とアクセス違反
いくつかの新しいコードを実行した後、私のC ++アプリケーションは奇妙な動作を始めました(画面の更新が正しくないか不完全であり、画面の更新がまったくない場合もあります)。しばらくすると、新しいコードがアクセス違反を引き起こしていることがわかりました。不思議なことに、アプリケーションは単に実行を続けます(ただし、画面の更新が正しくありません)。
最初は、問題の原因は「try-catch(...)」構造(過度にアクティブな元同僚によって配置された)であると考えましたが、数時間後(呼び出しスタックを注意深く調べ、多くのブレークポイントを追加し、... )ペイントイベントでアクセス違反が発生した場合、Windowsはそれをキャッチし、単にアプリケーションの実行を継続することがわかりました。
- これは正常な動作ですか?
- ペイントイベント中にWindowsが例外/エラーをキャッチするのは正常ですか?
- これを無効にする方法はありますか?(そうでない場合は、コードのテスト中にすべての例外を有効にして、常にデバッガーで実行する必要があることを意味します)。
編集:
- XPでは、正しくクラッシュします(アクセス違反後の必要な動作)
- VistaおよびWindows7では、アプリケーションは引き続き実行されます
c# - デバッガーが接続されていない C# アプリを実行している場合にのみアクセス違反例外が表示される
Visual Studios 2008 で正常に動作するアプリケーションがあり、.NET 4 を使用するためにそれを VS 2010 に取り込もうとしていますが、非常に奇妙な問題があります。デバッガーを接続してリリース モードまたはデバッグ モードからコードを実行すると (F5)、プログラムの実行に問題はありません。ただし、デバッガーを接続せずに Release または Debug からプログラムを実行すると (Shift+F5)、GDCMから dll でコードを実行しようとすると、アクセス違反例外が発生します。CMake と Swig を使用して dll を作成し、こちらの手順に従って、VS 2010 と .NET 4 用にビルドする必要がある場合は手順を調整しました。
なぜこれが起こっているのか、どうすれば修正できるのか、誰にもアイデアがありますか?
エラーが発生するプログラムの例を次に示します。繰り返しますが、VS 2010 のプログラムとして次のようなプロジェクトを作成すると、デバッガーがアタッチされている場合は正常に実行され、デバッガーがアタッチされていない場合は失敗します。
.net - WinDbg と ADPlus 7.0 で AV をキャッチするのに役立ちます
http://debuggingblog.com/wp/2009/02/18/memory-access-violation-in-sql-server-compact-editionce/で説明されているように、SQL Server Compact Edition でメモリ アクセス違反をキャッチしたい 構成は次のとおりです。
最新のデバッグ ツールをダウンロードし、Microsoft が adplus ツールをマネージ コードに書き換え、config ファイルの構文を変更する方法を観察します。設定ファイルを次のように書き換えます。
そして、「コードの例外が見つかりませんでした: clr;av」というエラーが表示されます。私が正しく理解している場合、sos拡張機能はロードされませんでしたが、ロードするために使用する必要がある正しいセクションと構文が見つかりません。
adplus_old.vbs - 何らかの理由で、Windows 7 でプロセスが起動しませんでした。WinDBG 6.12.0002.633 X86 ADPlus エンジン バージョン: 7.01.002 02/27/2009
誰かが、最新の adplus.exe を使用して .NET アプリをデバッグする構成の実例を持っているのではないでしょうか?
c++ - コードの何が問題になっていますか? (pdcurses/getmaxyx)
getmaxyx 行 (メイン関数の 2 行目) でアクセス違反が発生し、次の 2 つの警告も表示されます。
はい、それは私が尋ねた別の質問と同じコードです。より明確にするだけです。はい、私は以前に問題なく pdcurses を使用してプログラムを作成しました。
c++ - 配列の要素を読み取っているアクセス違反
.obj モデル ファイルを解析する独自のコードを作成しました。基本的には ASCII テキストのみです。私のテストによれば、ファイルは解析され、クラスに正しく保存されます。読み込み関数で (データ メンバーから) 値を読み返すことができます。
メインのレンダリング ループで値を読み戻そうとすると、問題が発生します。「int v」で始まる行にアクセス違反エラーがあります。
なぜこれが起こるのか正確にはわかりません。考えられることはすべてチェックしました。私は C++ の経験があまりありません。私のプログラミング経験のほとんどは Java、Python、および PHP ですが、以前は中規模のプロジェクトを C++ で作成していました。
問題は、動的配列に使用されるメモリ割り当てまたはポインターに関連する基本的なものであると確信しています。
obj ロード クラスのコードの関連部分を次に示します。
また、構造体 ObjFace、ObjVert、ObjUV、および ObjNormal は次のように定義されます。
助けてくれてありがとう。また、将来的にこれらのタイプのエラーを回避するための優れた情報源をいただければ幸いです。