問題タブ [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# - 保護されたメモリを読み書きしようとしました
アプリケーションのいくつかの異なる場所で AccessViolationException がスローされるのを見始めました。テストサーバーである私の開発用PCでは発生しませんでした。また、2 つの実稼働サーバーのうちの 1 つにしか現れませんでした。実稼働サーバーの 1 つでのみ発生しているように見えたので、サーバーにインストールされている .net フレームワークのバージョンを調べ始めました。
(何らかの奇妙な理由で) 問題が発生した運用サーバーには 2.0 sp2、3.0 sp2、および 3.5 sp1 があり、他の運用サーバーとテスト サーバーには 2.0 sp1 があることがわかりました。
私のアプリは 2.0 フレームワークのみを対象としており、運用サーバーからすべてのフレームワーク バージョンをアンインストールし、2.0 sp1 のみをインストールすることにしました。これまでのところ、問題を再現できませんでした。とても興味深い。
開発用 PC: コンパクト 2.0 sp2、コンパクト 3.5、2.0 sp2、3.0 sp2、3.5 sp1 テスト サーバー: 2.0 sp1 実稼働サーバー1: 2.0 sp1 実稼働サーバー2: 2.0 sp2、3.0 sp2、3.5 sp1
さて、問題を再現できない理由2.0 sp2 を搭載した私の開発用 PC には、わかりません。このアクセス違反は、リモーティングを使用する一部のソフトウェアで発生する可能性があるという噂を聞きましたが、実際にリモーティングが発生している場合はアクセス違反は発生しません。今のところ 2.0 sp1 のみを使用しても問題ありませんが、誰かがこの問題を抱えているかどうか、フレームワークの新しいバージョンの回避策を見つけたかどうかを知りたいと思っています。
いくつかの例外とそのスタック トレースを次に示します。
.net - .Net から COM オブジェクトにアクセスするとアクセス違反が発生する
投稿が長すぎて申し訳ありませんが、誰かが少なくとも太字のタイトルを読んで、正しい方向に向けてくれれば幸いです. 私はこの問題を数日間抱えていますが、ネット上で答えを見つけることができませんでした. これらは私がこれまでに発見したことです。
1.「アクセス違反」の例外により、マネージド アプリケーションがクラッシュする
私の C# WinForms アプリは、Windows フォーム TabControl で TabPage を選択した瞬間に、「アクセス違反」例外 (「保護されたメモリの読み取りまたは書き込みを試みました」) で終了することがあります。System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
スタック トレース (Application.Run の周りの try/catch) から、内部で呼び出された で例外が発生していることがわかりますUnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
。
2. 障害モジュールは COM オブジェクトのようです (ChartFX Client Server 6.2)
WinDbg (SoS をロード) を使用して、ChartFX.ClientServer.Core.dll (使用している COM チャート コンポーネント) 内のアンマネージ側でそれをキャッチしました。
[編集:] また、管理されていないスタックの詳細を WinDbg から取得できませんでした (「スタック アンワインド情報が利用できません」と表示されました):
3. バグの再現は容易ではありません (ただし、通常は 5 分以内に発生する可能性があります)。
複数の TabPages に複数の Chart インスタンスがあり、これは通常、タブを切り替えているときに発生します。問題が発生する前にタブを数分間切り替える以外に、問題を再現する方法がまだわかりません。そのため、ソース管理を使用して、この問題が発生していないビルドを確実に見つけることができません。VS デザイナーによって自動的に作成されたマネージ AxChart ラッパー クラス (AxHost から派生) を介してグラフにアクセスしています。
4. 次のステップは何ですか?
実際の原因を見つけるために私がすべき次のステップを誰かが教えてくれたら、とても感謝しています. 実験 (コードを削除して戻す) はあまり効果がありません。なぜなら、それを再現する方法がわからないためです。そのため、バグがまだそこにあることを自分自身に納得させるためだけに、反復ごとに多大な時間がかかります。
「コンパイラの最適化を切り替える」などの提案がよくあることがわかりましたが、例外は決定論的にスローされないため、単純に一部のバイトを再配置したくなく、返されないことを望みます。
delphi - AV 別のコンポーネントから呼び出されたコンポーネントからプロシージャを使用する場合
私がこれをできる限り説明したかどうかはわかりませんが、ここに行きます...
フォームに 2 つのカスタム コンポーネントがあり、設計時に IDE を介してリンクされています。コンポーネントからプロシージャを呼び出すたびに、アクセス違反が発生します。
モジュール 'Project2.exe' のアドレス 0049A614 でアクセス違反が発生しました。アドレス 00000034 の読み取り。
これは私のコードの小さなセクションです
と...
0049A614 は ***** にあり、IDE はここで停止します。
また、実行時に割り当てを実行しようとしました
運がない
相互に依存しない Presence1 または MyClient1 からのプロシージャを使用しても問題ありません。
デルフィ 7
フォローアップ: mghie のコメントから、私はそれについて再考しました。
フォームから TPresence コンポーネントを削除し (何らかの原因で奇妙な IDE エラーが発生したため)、設計時に作成し、必要なものをすべて割り当てました。今は動作しますが、TPresence コンポーネントを元に戻すと、エラーが再発します。
助けてくれてありがとう、別の質問を再開できない場合は、今すぐこれを解決できるはずです:)
memory-management - アクセス違反の書き込み場所エラーを解決するにはどうすればよいですか?
簡単なプログラムがあり、でアクセス違反が発生し*(str + start)
ます。なんで?私はそれを変えることができるはずです。右?
c# - C#.NET で Marshal.Copy メソッドが AccessViolationException をスローする
カメラからのライブ画像を表示する C# アプリケーションに取り組んでいます。次のコード スニペットで直面している問題は、この関数をスレッドで連続して実行すると、Marshal.Copy で AccessViolationException が発生することです。しかし、これは一度実行すると正常に実行されます (単一の静的イメージを取得します)。メモリ破損の問題に関係していると思います。この問題に対処する方法についてのアイデア/提案はありますか?
c# - .NET JITted コードから、アセンブラー コードの行を解読するのに助けが必要です
への呼び出しで終了する C# コンストラクターではthis(...)
、実際の呼び出しは次のように変換されます。
ここでの DS レジスタの内容は何ですか? データ セグメントであることはわかっていますが、この呼び出しは VMT テーブルなどを介したものですか? this(...)
ただし、仮想メソッドへの呼び出しではなく、単なる別のコンストラクターであるため、それは疑わしいです。
F11 キーを押して (Visual Studio 2008) にトレースすると、その呼び出し命令で、プログラムがアクセス違反でクラッシュします。
コードはサード パーティのコントロール ライブラリの奥深くにあります。ソース コードはありますが、C# コードを介してトレースできる十分なデバッグ情報を使用してコンパイルされたアセンブリがなく、逆アセンブラーのみを使用して、それを実際のコードに合わせます。
問題の C# コードは次のとおりです。
Reflector には、次の IL コードが表示されます。
失敗するのは、同じクラスの他のコンストラクターへの最後の呼び出しです。デバッガーが他のメソッド内に現れることはなく、クラッシュするだけです。
JITting 後のメソッドの逆アセンブリは次のとおりです。
基本的に私が求めているのはこれです:
ds:[ADDR]
ここでの間接化の目的は何ですか? VMT-tableは仮想専用ですよね?そしてこれはコンストラクタです- コンストラクターはまだ JIT されていない可能性があります。これは、呼び出しが実際に JIT shim を介して呼び出されることを意味する可能性がありますか? 私はここで深海にいるのではないかと心配しているので、何でも役立つかもしれません.
編集:まあ、問題は悪化したか、改善したか、または何でも。
Visual Studio 2008 ソリューションの C# プロジェクトで .NET 機能を開発し、Visual Studio を使用してデバッグと開発を行っています。
ただし、最終的に、このコードは Win32 Delphi アプリケーションによってホストされる .NET ランタイムにロードされます。
このような機能を簡単に実験できるようにするために、Visual Studio プロジェクト/ソリューション/デバッガーを構成して、生成された dll を Delphi アプリのディレクトリにコピーし、Visual Studio デバッガーを介して Delphi アプリを実行することもできます。
デバッガーの外でプログラムを実行すると問題は解決しますが、デバッグ中に毎回問題が発生します。
それが役立つかどうかはわかりませんが、コードの本番リリースはあと 6 か月ほど予定されていないため、間もなく行われるテスト リリースに対するプレッシャーが軽減されます。
後でメモリの部分に飛び込みますが、おそらく週末になるまでは続かないので、フォローアップを投稿します.
delphi - 任意のメモリ位置を読み取りますか?可能?
アクセス違反に遭遇することなく、任意のメモリ位置に(読み取り専用で)アクセスする方法はありますか?各プロセスには独自の仮想アドレス空間があり、使用可能なすべてのメモリ位置を読み取ることができると思いました...次のようなことをするとプログラムがハングするため、そうではないようです。
私はまだ低レベルの再帰的なサイズの関数を書き込もうとしており、データメンバーがオブジェクト参照であるかどうかを検出しようとしています。
ありがとう!