40

これは機能です:

public void Init(System.Type Type) {
    this.Type = Type;
    BuildFieldAttributes();
    BuildDataColumns(FieldAttributes);
}

1行目にブレークポイントを設定し( this.Type = Type)、​​いつブレークしたいType.FullName == "Malt.Organisation"かという条件で入力しました。

ただし、行がヒットすると、次のエラーが表示されます。

ブレークポイントの条件の実行に失敗しました。条件は「Type.FullName == "Malt.Organisation"」でした。返されたエラーは、「タイプ System.Type のデバッグ対象内のオブジェクトの状態の検査は、このコンテキストではサポートされていません」でした。

私が間違っている(明らかな)ことは何ですか?

PS。回避策は、これをコードに追加することです。

if (Type.FullName == "Malt.Organisation") System.Diagnostics.Debugger.Break();
4

4 に答える 4

54

私の場合、Visual Studio 2013、NUnit 2.6.4 を使用し、単体テスト セッションにデバッガーをアタッチすると、同様のメッセージが表示されました。

ブレークポイントの条件の実行に失敗しました。条件は「type.Name.Contains("FooBar")」でした。返されたエラーは、「System.Type 型のデバッグ対象内のオブジェクトの状態の検査は、このコンテキストではサポートされていません」でした。[OK] をクリックして、このブレークポイントで停止します。

これは、明らかに、Microsoft が導入した新しいデバッグ エンジンに欠落している機能が原因でした。この msdn blogpost の指示に従って、作業を開始しました。指示は次のように要約されます。

  1. ツール」メニューから「オプション」を開きます
  2. 左側で「デバッグ」、「一般」を選択します
  3. 一番下までスクロールして、「 Use Managed Compatibility Mode」にチェックを入れます

これにより、レガシ デバッグ エンジンに切り替える必要があります。これは、私の場合、ブレーク ポイント条件で Type の式を許可していました。明らかに、アプリまたはデバッグ セッションを再起動する必要があることに注意してください。

免責事項: このオプションをチェックすると、他にどのような影響があったかわかりません。個人的には、必要な作業が終わったらオフに戻しました...

于 2016-03-14T09:39:20.563 に答える
4

Type.FullName == "Malt.Organisation"それが原因で壊れるとおっしゃっていますが、試してみましたthis.Type.FullName == "Malt.Organisation"か?

別の可能性として、デバッガーは、クラス名のような Type という名前の変数を持つ静的メソッドを呼び出そうとしていると考えていますか? Type 変数の名前を別の名前に変更すると修正されますか?

于 2015-08-28T18:13:57.833 に答える