web-dev-qa-db-ja.com

System.Typeで条件付きブレークポイントを使用するとエラーが発生する

これは機能です:

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

最初の行にブレークポイントを設定しました(this.Type = TypeType.FullName == "Malt.Organisation"これが条件として入力したものです。

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

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

私は何を(明らかに)間違っていますか?

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

if (Type.FullName == "Malt.Organisation") System.Diagnostics.Debugger.Break();
35
Rob Nicholson

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

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

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

  1. Tools」メニューから「Options」を開きます
  2. 左側で「Debugging」、「General」を選択します
  3. 管理互換モードを使用する」を確認するために、スクロール

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

免責事項:このオプションをチェックする他の効果がどんなものかわかりません。個人的には、それを必要とするタスクが完了したときにオフにしました...

51
Jeroen

Type.FullName == "Malt.Organisation"は、それを壊します。this.Type.FullName == "Malt.Organisation"

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

4
Daniel Stone

私はこれに遭遇しましたが、WebアプリケーションでIsInterfaceをテストするときに。デバッガで追加機能を有効にする代わりに、私は単純にごまかしました。

bool blnIsInterface = tType.IsInterface;

//Insert breakpoint here...
if(blnIsInterface)
{
    ...
}

あなたの場合、あなたは次のようなことをすることができます

public void Init(System.Type Type) {
    bool blnBreak = Type.FullName == "Malt.Organisation";
    //insert breakpoint of blnBreak == true
    this.Type = Type;
    BuildFieldAttributes();
    BuildDataColumns(FieldAttributes);
}

少し面倒ですが、少なくともパフォーマンスヒットについて心配する必要はありません。ネイティブコードデバッグを有効にすることは、Webアプリケーションのオプションではないようです。

3
Wes Hanney

ここで説明した「管理互換モードを使用する」ソリューションについてはわかりません-助けにはなりませんでしたが、私の場合はProject > Properties > Debug > Enable Native code debugging-チェックを外す必要があります。

なぜ-今のところ手がかりがありません。

.net 4.5、vs2015、コンソールアプリケーションを使用していました。

1
TarmoPikaro