サポートされているコード変更 (C#)
エディット コンティニュでは、メソッドの本体内で行ったほとんどの種類のコード変更を処理できます。しかし、メソッドの本体外で行った変更の大部分やメソッドの本体内で行った一部の変更は、デバッグ時に適用できません。このようなサポートされていない変更を適用するには、デバッグを停止し、新しいバージョンのコードを再起動する必要があります。
デバッグ セッション中に C# コードに適用できない変更は、次のとおりです。
現在のステートメントまたはその他のアクティブ ステートメントに対する変更。
アクティブ ステートメントには、現在のステートメントを取得するために呼び出される、呼び出し履歴上の関数内に存在するすべてのステートメントが含まれます。
ソース ウィンドウ内では、現在のステートメントは黄色の背景で示されます。その他のアクティブ ステートメント (読み取り専用) は、網かけの背景で示されます。これらの既定の色は、[オプション] ダイアログ ボックスで変更できます。
以下のようなグローバル シンボルの変更。
新しい型の追加
型へのメソッドの追加
型のシグネチャの変更
型へのフィールド、イベント、またはプロパティの追加
匿名メソッド、または匿名メソッドを含む任意のメソッドの編集。これらのメソッドは、網かけの背景で示されます。
新しい匿名メソッドの追加。
属性の追加、削除、変更。
using ディレクティブの追加、削除、変更。
ローカル変数の削除または変更。ローカル変数の追加は可能です。
アクティブ ステートメントの周囲への foreach、using、または lock の追加。
yield return ステートメントまたは yield break ステートメントを含むメソッドの変更。
匿名メソッドで初期化されるフィールドを持つコンストラクターの変更。
アンセーフ コード
アンセーフ コードを変更する場合、セーフ コードを変更するときと同じ制限に加えて、もう 1 つ追加の制限が適用されます。
- エディット コンティニュは、stackalloc 演算子を含むメソッド内に存在するアンセーフ コードへの変更をサポートしません。これは、アクティブ メソッドだけに当てはまります。デバッグ中は、現在呼び出し履歴にある関数がアクティブな関数となります。
例外
呼び出し履歴に存在するメソッドなど、アクティブ メソッド ブロックのある例外が catch、 finally、と try ブロックへの変更をサポート、および編集します。
アクティブな関数が呼び出し履歴の最新の関数である場合、エディット コンティニュは次の編集をサポートしません。
アクティブ ステートメントの周囲の catch または finallyのブロックの追加。
入れ子 (7 レベル以上) の例外ハンドラーの追加
アクティブな関数が呼び出し履歴の最新の関数でない場合、エディット コンティニュは次の編集をサポートしません。
アクティブ ステートメントの周囲の catch、 finally または tryのブロックの追加。
入れ子 (7 レベル以上) の例外ハンドラーの追加
アクティブ ステートメントを含む tryブロック内のコードの変更。
サポートされていないシナリオ
次のデバッグ シナリオでは、エディット コンティニュを使用できません。
LINQ コードのデバッグ。詳細については、「Edit and Continue Not Supported for LINQ」を参照してください。
混合モードでの (ネイティブ/マネージ) デバッグ
SQL デバッグ
ワトソン博士のダンプのコードを編集しようとした。
未処理の例外を受け取った後のコード編集 ([ハンドルされていない例外で呼び出し履歴をアンワインドする] がオンでない場合)
埋め込まれたランタイム アプリケーションのデバッグ
[デバッグ] メニューの [開始] をクリックしてアプリケーションを実行する代わりに [アタッチ先] を使用して行うアプリケーションのデバッグ
最適化されたコードのデバッグ
マネージ コードのデバッグ (デバッグ対象が 64 ビット アプリケーションである場合)。エディット コンティニュを使用する場合は、デバッグ対象を x86 に設定する必要があります (Project,プロジェクトプロパティの コンパイルします。 のタブ、 [ビルド の設定)。
ビルド エラーによって新しいバージョンのビルドが失敗した後の旧バージョンのデバッグ