Visual Studio でデザイン時にデバッグする (C#、C++/CLI、Visual Basic、F#)

アプリの実行中にではなくデザイン時にコードをデバッグするには、 [イミディエイト] ウィンドウを使用できます。

宣言型データ バインディングのシナリオなど、XAML デザイナーからアプリの XAML 分離コードをデバッグするには、 [デバッグ]>[プロセスにアタッチ] を使用できます。

[イミディエイト] ウィンドウを使用する

Visual Studio の [イミディエイト] ウィンドウを使用すると、アプリを実行しなくても、関数やサブルーチンを実行できます。 関数またはサブルーチンにブレークポイントが含まれている場合、Visual Studio はブレークポイントで中断します。 デバッガー ウィンドウを使用して、プログラムの状態を確認できます。 この機能は、デザイン時のデバッグと呼ばれます。

Visual Basic での例を次に示します。 C#、F#、および C++/CLI アプリでは、デザイン時に [イミディエイト] ウィンドウを使用することもできます。 C++/CLI の場合、イミディエイト ウィンドウを使うには /clr オプションを指定しないでコンパイルします。

  1. 次のコードを空白の Visual Basic コンソール アプリに貼り付けます。

    Module Module1
    
        Sub Main()
            MySub()
        End Sub
    
        Function MyFunction() As Decimal
            Static i As Integer
            i = i + 1
            Return i
        End Function
    
        Sub MySub()
            MyFunction()
    
        End Sub
    End Module
    
  2. End Function という行にブレークポイントを設定します。

  3. [イミディエイト] ウィンドウを開くには、 [デバッグ]>[Windows]>[イミディエイト] を選択します。 ウィンドウに「?MyFunction」と入力してから、Enter キーを押します。

    ブレークポイントにヒットし、 [ローカル] ウィンドウの [MyFunction] の値が 1 になります。 アプリが中断モードのときに、呼び出し履歴とその他のデバッグ ウィンドウを調べることができます。

  4. Visual Studio ツール バーで [続行] を選択します。 アプリが終了し、 [イミディエイト] ウィンドウに 1 が返されます。 まだデザイン モードになっていることを確認します。

  5. もう一度 [イミディエイト] ウィンドウに「?MyFunction」と入力し、Enter キーを押します。 ブレークポイントにヒットし、 [ローカル] ウィンドウの [MyFunction] の値が 2 になります。

  6. [続行] を選択せずに、 [イミディエイト] ウィンドウに「?MySub()」と入力し、Enter キーを押します。 ブレークポイントにヒットし、 [ローカル] ウィンドウの [MyFunction] の値が 3 になります。 アプリが中断モードになっている間は、アプリの状態を確認できます。

  7. [続行] を選択します。 もう一度ブレークポイントにヒットし、 [ローカル] ウィンドウの [MyFunction] の値が 2 になります。 [イミディエイト] ウィンドウによって、「式は評価されましたが、値が指定されていません。 」が返されます。

  8. もう一度 [続行] を選択します。 アプリが終了し、 [イミディエイト] ウィンドウに 2 が返されます。 まだデザイン モードになっていることを確認します。

  9. [イミディエイト] ウィンドウの内容を消去するには、ウィンドウ内を右クリックし、 [すべてクリア] を選択します。

XAML デザイナーにアタッチしてデザイン時にカスタム XAML コントロールをデバッグする

  1. Visual Studio でソリューションまたはプロジェクトを開きます。

  2. ソリューションまたはプロジェクトをビルドします。

  3. デバッグするカスタム コントロールを含む XAML ページを開きます。

    Windows ビルド 16299 以降を対象とする UWP プロジェクトの場合、この手順により UwpSurface.exe プロセスが開始します。 Windows ビルド 16299 以降を対象とする WPF プロジェクトの場合、この手順により WpfSurface.exe プロセスが開始します。 Windows ビルド 16299 より前の WPF または UWP バージョンの場合、この手順により XDesProc.exe プロセスが開始します。

  4. Visual Studio の 2 つ目のインスタンスを開きます。 2 番目のインスタンスでは、ソリューションまたはプロジェクトを開かないでください。

  5. Visual Studio の 2 番目のインスタンスで、 [デバッグ] メニューを開き、 [プロセスにアタッチ...] を選択します。

  6. プロジェクト タイプに応じて (前の手順を参照)、UwpSurface.exeWpfSurface.exe、または XDesProc.exe プロセスを、使用可能なプロセスの一覧から選択します。

  7. [プロセスにアタッチ] ダイアログの [アタッチ先] フィールドで、デバッグするカスタム コントロールに対して適切なコードの種類を選択します。

    カスタム コントロールが .NET 言語で記述されている場合は、 [マネージド (CoreCLR)] など、適切な .NET コードの種類を選択します。 カスタム コントロールが C++ で記述されている場合は、 [ネイティブ] を選択します。

  8. [アタッチ] ボタンをクリックして、Visual Studio の 2 番目のインスタンスをアタッチします。

  9. Visual Studio の 2 番目のインスタンスで、デバッグするカスタム コントロールに関連付けられているコード ファイルを開きます。 ソリューションまたはプロジェクト全体ではなく、ファイルのみを開いてください。

  10. 前に開いたファイルに必要なブレークポイントを設定します。

  11. Visual Studio の最初のインスタンス内で、デバッグするカスタム コントロール (前の手順で開いたものと同じページ) を含む XAML ページを閉じます。

  12. Visual Studio の最初のインスタンスで、前の手順で閉じた XAML ページを開きます。 これにより、Visual Studio の 2 番目のインスタンスに設定した最初のブレークポイントでデバッガーが停止します。

  13. Visual Studio の 2 番目のインスタンス内でコードをデバッグします。