在 Visual Studio 中进行设计时调试(C#、C++/CLI、Visual Basic、F#)

若要在设计时(而不是在应用运行时)调试代码,可以使用“即时”窗口。

若要在 XAML 设计器中调试应用的隐藏 XAML 代码(如声明性数据绑定方案),可以使用“调试”>“附加到进程”。

使用“即时”窗口

可以在应用未运行时使用 Visual Studio 的“即时”窗口执行函数或子例程。 如果函数或子例程包含断点,则 Visual Studio 会在断点处中断。 随后即可使用调试器窗口检查程序状态。 此功能称为“在设计时调试”。

以下示例适采用 Visual Studio。 在 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. 通过选择“调试”>“窗口”>“即时”来打开“即时”窗口。 在该窗口中键入 ?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 的第二个实例。 不要在第二个实例中打开解决方案或项目。

  5. 在 Visual Studio 的第二个实例中,打开“调试”菜单,然后选择“附加到进程...”。

  6. 根据项目类型(请参阅前面的步骤),从可用进程的列表中选择 UwpSurface.exe、WpfSurface.exe 或 XDesProc.exe 。

  7. 在“附加到进程”对话框的“附加到”字段中,为要调试的自定义控件选择正确的代码类型 。

    如果自定义控件是使用 .NET 语言编写的,请选择相应的 .NET 代码类型,如“托管(CoreCLR)”。 如果自定义控件是使用 C++ 编写的,请选择“本机”。

  8. 通过单击“附加”按钮来附加 Visual Studio 的第二个实例。

  9. 在 Visual Studio 的第二个实例中,打开与要调试的自定义控件关联的代码文件。 确保只打开这些文件,而不是整个解决方案或项目。

  10. 在前面打开的文件中放置所需断点。

  11. 在 Visual Studio 的第一个实例中,关闭包含要调试的自定义控件的 XAML 页(在前面步骤中打开的同一页)。

  12. 在 Visual Studio 的第一个实例中,打开在上一步中关闭的 XAML 页。 这会使调试器在 Visual Studio 的第二个实例中设置的第一个断点处停止。

  13. 在 Visual Studio 的第二个实例中调试代码。