2023年1月

“选项”对话框 ->“调试”->“实时”

若要访问“实时”页,请转到“工具”菜单,然后单击“选项”。 在“选项”对话框中,展开“调试”节点并选择“实时”。 该页允许为托管代码、本机代码和脚本启用实时调试。

可以为以下程序类型启用实时调试:

  • Managed

  • 本机

  • 字符集

实时调试是调试在 Visual Studio 之外启动的程序的一种方法。 可以在 Visual Studio 环境之外运行在 Visual Studio 中创建的程序。 如果已启用实时调试,则发生崩溃时会显示一个对话框询问是否进行调试。

“选项”对话框 ->“调试”->“输出”窗口

可以指定在“输出”窗口中显示哪些类型的调试信息。 若要显示这些选项,请打开“工具”菜单,单击“选项”,展开“调试”节点,再单击“输出窗口”。

  • 常规输出设置
    可以使用此类别包含的控件,确定是否在“输出”窗口中显示常规调试消息。 您可以指定是否显示每种类型的消息。

  • WPF 跟踪设置
    可以使用此类别包含的控件,确定在“输出”窗口中显示的 WPF 跟踪消息的级别。 您可以指定是否显示每种类型的消息,并且可以指定“关键”到“全部”范围内的某个级别。

比如,常规设置里所有的都设置位ON

将所有的设置为OFF时

“选项”对话框 ->“调试”->“符号”

若要访问“符号”页,请选择“工具”菜单上的“选项”。 在“选项”对话框中,展开“调试”节点并选择“符号”。 在此页中可以设置以下常规调试选项。

  • 符号文件(.pdb)位置

    调试器将在其中查找符号文件的位置的列表。 位置可以包括目录、URL、共享和符号服务器位置。本列表只包含已知的和受信任的位置。 如前面的“安全说明”所述,从不可信位置加载符号可能产生有害作用。

  • Microsoft 符号服务器

    选择此选项可以从 Microsoft 公共符号服务器下载符号。 必须连接到 Internet 才能访问 Microsoft 符号服务器。

    使用源服务器时必须考虑以下潜在的安全威胁:

    任何命令都可以嵌入到应用程序的 .pdb 文件中。 因此,请确保只将要执行的命令放入 srcsrv.ini 文件。 任何尝试执行不在 srcsvr.ini 文件中的命令都将导致出现一个确认对话框。

    未对命令参数执行任何验证,因此请慎用受信任的命令。 例如,如果您信任 cmd.exe,恶意用户则可能会指定使该命令变得危险的参数。

  • 文件夹图标按钮
    单击此按钮在列表中创建新位置。

  • “X”图标按钮
    在列表中选择一个位置,然后单击此按钮从列表中移除该目录。

  • 上箭头图标按钮
    在列表中选择了一个目录时,单击此按钮在列表中向上移动。

  • 下箭头图标按钮
    在列表中选择了一个目录时,单击此按钮在列表中向下移动。

  • 在此目录下缓存符号


    如果使用服务器中的符号,则可以使用本地目录提高调试器的性能。 此目录会保存从符号服务器获取的系统软件的符号。 缓存符号会提高磁盘使用率。 在通过
    Internet 使用符号服务器时,缓存尤其有用。 注意,如果调试的是远程计算机上的程序,则缓存目录指的是远程计算机上的目录。


  • 单击此按钮将显示一个对话框,您可以在该对话框中浏览并选择要用于前一项的目录。

  • 加载所有符号
    立即从所有指定的位置加载符号。

  • 清空符号缓存
    删除在“在此目录下缓存符号”中指定的位置处的所有符号文件。 也将删除目录本身。

  • 除排除模块之外的所有模块
    使用此设置可以加载符号文件位置中所有模块的符号,但排除列表中指定的模块除外。

  • 指定排除的模块
    单击此链接可以创建或修改符号文件排除列表。

  • 仅指定的模块
    使用此设置可以只加载包括列表中指定的模块的符号。

  • 指定模块
    单击此链接可以创建或修改符号文件包括列表。

这些属性页位于 "项目 > 属性 > " "配置属性 > " "调试" 下。 在下拉控件中选择 "调试器类型"。

 

"本地 Windows 调试器" 属性页

命令

要执行的调试命令。

命令参数

要传递给应用程序的命令行参数。

工作目录

应用程序的工作目录。 默认情况下,包含项目文件的目录。

Attach

指定调试器是否应尝试在启动调试时附加到现有进程。

调试器类型

指定要使用的调试器类型。 如果设置为 "自动",则将根据 exe 文件的内容选择调试器类型。

方案

  • 仅限本机-仅限本机
  • 仅限托管
  • 混合混合
  • 自动自动
  • 脚本-脚本
  • 仅限 GPUC++ (amp) -仅限C++ gpu (amp)

环境

指定要调试的程序的环境,或要与现有环境合并的变量。

调试加速器类型

用于调试 GPU 代码的调试加速器类型。 (当 GPU 调试器处于活动状态时可用。)

GPU 默认断点行为

设置 GPU 调试器中断的频率。

方案

  • 每个弯曲一次中断一次
  • 为每个线程中断(例如 cpu 行为) -每个线程中断(如 cpu 行为)

合并环境

将指定的环境变量与现有环境合并。

SQL 调试

附加 SQL 调试器。

Amp 默认快捷键

覆盖C++ AMP 的默认快捷键选择。 调试托管代码时,属性不适用。

"远程 Windows 调试器" 属性页

远程命令

要执行的调试命令。

远程命令参数

要传递给应用程序的命令行参数。

工作目录

应用程序的工作目录。 默认情况下,包含项目文件的目录。

远程服务器名称

指定远程服务器名称。

连接

指定连接类型。

方案

  • 带 windows 身份验证的远程-远程和windows 身份验证。
  • 不带身份验证的远程远程身份验证(无身份验证)。

调试器类型

指定要使用的调试器类型。 如果设置为 "自动",则将根据 exe 文件的内容选择调试器类型。

方案

  • 仅限本机-仅限本机
  • 仅限托管
  • 混合混合
  • 自动自动
  • 脚本-脚本
  • 仅限 GPUC++ (amp) -仅限C++ gpu (amp)

环境

指定要调试的程序的环境,或要与现有环境合并的变量。

调试加速器类型

用于调试 GPU 代码的调试加速器类型。 (当 GPU 调试器处于活动状态时可用。)

GPU 默认断点行为

设置 GPU 调试器中断的频率。

方案

  • 每个弯曲一次中断一次
  • 为每个线程中断(例如 cpu 行为) -每个线程中断(如 cpu 行为)

Attach

指定调试器是否应尝试在启动调试时附加到现有进程。

SQL 调试

附加 SQL 调试器。

部署目录

当在远程计算机上进行调试时,如果希望将项目输出的内容(PDB 文件除外)复制到远程计算机,请在此指定路径。

其他要部署的文件

在远程计算机上进行调试时,此处指定的文件和目录(项目输出除外)将被复制到部署目录(如果已指定)。

部署 Visual C++ 调试运行时库

指定是否为活动平台(Win32、x64 或 ARM)部署调试运行库。

Amp 默认快捷键

覆盖C++ AMP 的默认快捷键选择。 调试托管代码时,属性不适用。

Web 浏览器调试器属性页

HTTP URL

指定项目的 URL。

调试器类型

指定要使用的调试器类型。 如果设置为 "自动",则将根据 exe 文件的内容选择调试器类型。

方案

  • 仅限本机-仅限本机
  • 仅限托管
  • 混合混合
  • 自动自动
  • 脚本-脚本

"Web 服务调试器" 属性页

HTTP URL

指定项目的 URL。

调试器类型

指定要使用的调试器类型。 如果设置为 "自动",则将根据 exe 文件的内容选择调试器类型。

方案

  • 仅限本机-仅限本机
  • 仅限托管
  • 混合混合
  • 自动自动
  • 脚本-脚本

SQL 调试

附加 SQL 调试器。

顾名思义,AggregateException用于在单个异常中对一个或多个异常进行批处理。在本文中,我将向您展示为什么会发生此异常,以及如何在C代码中调试它。

错误的产生和处理

让我们从强制一个产生新的AggregateException开始。这个异常在.NET的任务库中被大量使用,为什么选择一个包含任务的示例是一件轻而易举的事情:

Task task1 = Task.Factory.StartNew(() => { throw newArgumentException(); } );
Task task2
= Task.Factory.StartNew(() => { throw newUnauthorizedAccessException(); } );try{
Task.WaitAll(task1, task2);
}
catch(AggregateException ae)
{
}