常见问题解答 - 调试器功能查找器

本文档介绍了有关在 Visual Studio 中调试功能的常见问题。 它还会将调试任务或问题映射到 Visual Studio 调试器中的相关功能。 这些链接涵盖调试多线程应用程序、代码导航、内存泄漏、检查变量、使用断点、外部代码调试等任务或问题。 如果需要调试器功能的概述,请参阅 首先查看调试器

断点

  • 如何暂停运行代码以检查可能包含 bug 的代码行?

    设置断点。 有关详细信息,请参阅 使用正确的断点类型断点入门

  • 如何根据特定条件暂停运行代码?

    设置正确的断点类型。 有关详细信息,请参阅 使用正确的断点类型

  • 如何在可配置条件下将信息记录到“输出”窗口,而无需修改或停止我的代码?

    利用跟踪点,可以在可配置条件下将信息记录到“输出”窗口,而无需修改或停止代码。 有关详细信息,请参阅 在 Visual Studio 调试器 中使用跟踪点

  • 管理和跟踪断点

    使用 断点 窗口。 有关详细信息,请参阅 管理断点

  • 在引发特定处理或未处理的异常时暂停代码和调试

    尽管异常帮助程序显示发生错误的位置,但如果要暂停和调试特定错误,可以 告知调试器在引发异常时中断

  • 从调用堆栈 设置断点

    如果要在检查执行流或查看 调用堆栈 窗口中的函数时暂停和调试代码,请参阅 在“调用堆栈”窗口中设置断点

  • 在特定程序集指令处暂停代码

    可以通过 从反汇编窗口设置断点来执行此操作。

导航代码

  • 如何了解在调试时单步执行代码的命令?

    有关详细信息,请参阅 使用调试器导航代码。

  • 跳过断点时是否可以将代码运行到特定行,而无需删除或禁用它们?

    对于这些方案,可以使用“强制运行到游标”。 可以保留断点,调试器将跳过它们,直到它到达带有游标的代码行。 它还将跳过可能发生的任何一次偶然异常中断条件。 有关详细信息,请参阅 使用调试器导航代码。

  • 如果我的代码行调用了不同的方法,是否可以单步执行特定方法?

    右键单击代码行以显示上下文菜单,该菜单允许您选择“单步执行特定”。 这将显示可以单步执行的所有方法的列表。 现在可以选择感兴趣的方法。

检查和可视化数据

  • 如何在运行应用时检查变量的值?

    使用 数据提示将鼠标悬停在变量上,在“自动变量”和“局部变量”窗口中检查变量。

  • 是否可以观察特定变量的更改值?

    对变量设置监视。 有关详细信息,请参阅 设置对变量的监视。

  • 如何查看调试器窗口太长字符串?

    字符串可视化工具显示数据提示或调试器窗口太长字符串。 它还可以帮助你识别格式不正确的字符串。
    Visual Studio 中的内置 字符串可视化工具 包括文本、XML、HTML 和 JSON 选项。

  • 如何查看大型集合对象?

    使用 DataSet 可视化工具可以查看 DataSet、DataTable、DataView 或 DataViewManager 的内容。 使用 IEnumerable 可视化工具可以查看数组、列表等对象。有关详细信息,请参阅 表格可视化工具

调试正在运行的应用

  • 如何调试在本地或远程计算机上运行的应用、同时调试多个进程、调试未在 Visual Studio 中创建的应用,或调试未从 Visual Studio 启动的任何应用?

    请参阅 附加到正在运行的进程

  • 如何重复附加到同一应用程序?

    可以使用 重新附加到进程Shift+Alt+P)轻松地在一键式中开始调试应用程序,而无需每次都通过“附加到进程”对话框。 请参阅 重新附加到进程

调试多线程应用程序

  • 如何调试多线程应用程序? 或者,我的应用程序是否处于挂起状态?

    请参阅 并行堆栈窗口 进一步故障排除

  • 如何查看调用函数的顺序?

    请参阅 如何查看调用堆栈

分析内存

  • 应用程序是否存在内存泄漏?

    拍摄快照并使用内存工具将其打开,以便进一步进行故障排除。 请参阅 度量内存使用情况

  • 如何分析本机或托管应用程序的内存使用情况?

    通过实时调试、堆转储或性能探查器使用 Visual Studio 内存工具。
    请参阅 选择内存分析工具

  • 如何在不附加调试器的情况下分析本机或托管应用程序的内存使用情况? 使用启用了内存使用工具的 Visual Studio 性能探查器。
    请参阅 分析内存使用情况

  • 是否可以比较两个时间点之间的内存使用情况?

    使用差异功能比较内存工具中的快照或比较两个堆转储。 请参阅 分析内存使用情况

外部代码调试

  • 调试时是否只能看到用户代码?

    仅“我的代码”是一项 Visual Studio 调试功能,可自动逐步执行对系统、框架和其他非用户代码的调用。 在“调用堆栈”窗口中,“仅我的代码”将这些调用折叠到 [外部代码] 帧中。 请参阅 仅调试仅我的代码的用户代码

  • 如何查看或调试程序正在执行的原始程序集指令?

    使用调试 > Windows > 反汇编中的反汇编窗口。 可以一次单步执行一个指令,甚至可以对单个程序集指令设置断点。

  • 是否可以查看 .NET 库的源代码?

    从调试 > 选项 > 符号启用Microsoft符号服务器,以便下载 .NET 库的符号和源。 请参阅 指定符号

  • 如何从特定或共享位置或服务器加载 PDB?

    从调试 > 选项 > 符号配置符号服务器。 请参阅 指定符号

  • 如何从不加载特定的 PDB? 或者,如何始终加载一个?

    在调试 > 选项 > 符号中配置包括和排除列表。
    请参阅 指定符号

配置调试

  • 如何配置调试器设置?

    若要配置调试器选项和调试器项目设置,请参阅 调试器设置和准备

  • 如何自定义调试器中显示的信息?

    你可能希望将对象类型以外的信息显示为不同调试器窗口中的值。 对于 C#、Visual Basic、F# 和 C++/CLI 代码,请使用 DebuggerDisplay 属性。 对于更高级的选项,还可以通过创建 自定义可视化工具来自定义 UI。 对于本机C++,请使用 NatVis 框架

其他任务

  • 是否需要保存转储?

    调试期间在错误或断点处停止时,请选择 “调试”>“将转储另存为”。 请参阅 转储文件

  • 如何分析转储文件?

    通过选择 Visual Studio 中的 文件 > 打开 来打开转储。 若要开始调试,请选择“仅托管 调试”“,使用本机仅进行调试,使用混合进行调试,或者使用托管内存 调试。 请参阅 转储文件

  • 是否可以在调试会话期间编辑代码?

    使用 编辑并继续。 对于 XAML,请使用 XAML 热重载

  • 如何在远程计算机上调试?

    请参阅 远程调试

  • 如何解决性能问题?

    请参阅 首先查看分析工具

  • 如何修复异常?

    请参阅 修复异常