NullReferenceExceptionには、なぜNullであるという情報が含まれていないのでしょうか?
質問
NullReferenceException がベースクラスのデータ (スタックトレースなど) 以外の実行時特有の情報を含まないのは、どのような設計上の判断によるものですか? また、式のどの部分が NULL だったかをすぐに教えてくれる Visual Studio 用の拡張機能はありますか?
どのように解決するのですか?
NRE は非常に低レベルの例外です。 64K 未満のアドレスからデータを読み込むように要求されたときに、プロセッサによって生成されるハードウェア例外 (「トラップ」) であります。 仮想メモリ空間のその領域は、特にポインタのバグを捕捉するために常にアンマップされています。 AccessViolationとして始まり、アドレスが0x00010000より小さいときにCLRによってNREになります。 その時点では、例外のコンテキストはほとんどなく、わかっているのはトラップを引き起こしたマシン コード命令のアドレスだけです。
そのマシン コード命令のアドレスを、プログラム内の名前付き変数に戻すリバース エンジニアリングは不可能です。 そのように動作することが重要であり、ジッターは生成された 非常に
そうでない場合は、非常に非効率的なコードを生成する必要があります。 合理的にできることは、ソース コードの行番号を回復することだけです。 それには、行番号情報を含むデバッグ情報(.pdb)が必要です。 CLR は .pdb ファイルを読み取る方法を知っており、それを使って例外のスタックトレースを生成します。 しかし、JITオプティマイザが行う最適化により、これはまだ不正確なことが多く、コードを動かしてしまう。 Debugビルドの場合のみ、一致が保証されます。 ReleaseビルドのPDBにソース行番号情報が含まれないのは、そのためです。 これを変更することができます。
この問題は非常にシンプルな解決策を持っています。 ランタイムに実行させる前に、自分自身で null をチェックし、自分自身の例外を生成します。 このテストは非常に安価で、まあナノ秒より短いです。
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] なぜC#は静的メソッドにインターフェイスを実装できないのか?
-
[解決済み] x is null」と「x == null」の違いは何ですか?
-
[解決済み】WPFアプリケーションで例外をグローバルにキャッチする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない