使用 Visual Studio 进行调试
来源:互联网 发布:巫师3优化好 编辑:程序博客网 时间:2024/05/22 08:24
使用 Visual Studio 进行调试
您已经创建了应用程序并解决了生成错误。 现在,您必须纠正那些使应用程序或存储过程无法正确运行的逻辑错误。 可以用开发环境集成调试功能做到这一点。这些功能使您可以在某些过程位置停止执行,检查内存和寄存器值,更改变量,观察消息通信量,以及仔细查看代码的行为。
调试器安全
调试其他进程的能力赋予您极广泛的权力,这是无法通过其他途经获得的,在进行远程调试时更是如此。恶意的调试器可能对正在调试的计算机造成大范围的损害。因此,对可能进行调试的人要有所限制。
但是,许多开发人员没有意识到安全威胁也可以从相反的方向产生。 调试对象进程中的恶意代码可能危害调试计算机的安全:有许多必须防范的不道德的安全利用。
安全性最佳做法
安全性最佳做法
正在调试的代码与调试器之间有一种隐式信任关系。 如果想调试代码,您还应该乐于运行它。 您起码必须能够信任要调试的代码。如您无法信任它,就不应对它进行调试,或者应在可以承担风险且处于独立环境的计算机上对其进行调试。
为了缩小潜在的攻击面,应在生产计算机上禁用调试。 出于同样的原因,永远不应无限制地启用调试。
托管调试安全
下面是一些适用于所有托管调试的常规建议。
附加到非信任用户的进程时要小心:当这样做时,您假定它是可以信赖的。 当您尝试附加到非信任用户的进程时,将会出现一个安全警告对话框确认,询问您是否希望附加到该进程。” “信任用户”包括您以及在安装了 .NET Framework 的计算机上通常定义的一组标准用户,如“aspnet”、“localsystem”、“networkservice”和“localservice”。
从 Internet 下载项目并将其加载到 Visual Studio 时要小心。即使没有进行调试这样做也很冒险。这样做时,您假定该项目和它包含的代码是可以信赖的。
远程调试安全
本地调试通常比远程调试更安全。 远程调试增加了可查看的总表面积。
Visual Studio 远程调试监视器 (msvsmon.exe) 用于远程调试,有若干对其进行配置的安全建议。由于无身份验证模式不安全,因此配置身份验证模式的首选方式是 Windows 身份验证。使用 Windows 身份验证模式时,请注意,授予非信任用户连接到 msvsmon 的权限是危险的,将由对话框警告指出。
不要在远程计算机上调试未知进程:有潜在的利用,可能会影响正在运行调试器的计算机,或危害 msvsmon.exe(Visual Studio 远程调试监视器)。如果一定要调试未知进程,请尝试本地调试,并使用防火墙将任何潜在的威胁限制在本地。
Web 服务调试安全
本地调试要安全一些,但是如果在 Web 服务器上没有安装 Visual Studio,则本地调试也许不是实际可行的。通常,调试 Web 服务都是远程完成的,除非在开发期间,因此远程调试安全的建议也适用于 Web 服务调试。下面是一些其他最佳做法。
不要在已受威胁的 Web 服务器上启用调试。
在调试前,请确保您知道该 Web 服务器是安全的。 如果您不能确定它是安全的,请不要调试它。
如果您正在调试对 Internet 公开的 Web 服务,请特别小心。
外部组件
请注意与您程序交互的外部组件的信任状态,尤其是如果您没有编写此代码。 还要注意 Visual Studio 或调试器可能使用的组件。
符号和源代码
两个需要考虑安全的 Visual Studio 工具如下:
源服务器,用于从源代码存储库中提供源代码的版本。 当没有程序源代码的当前版本时它很有用。
符号服务器,用于在系统调用期间提供调试崩溃所需的符号。
调试设置和准备
本节描述与调试器相关的属性设置,以及为了使用 Visual Studio 调试器调试程序所需要的准备工作。如果在 Visual Studio 中使用项目模板创建程序,则调试配置中将为您正确配置这些设置。调试器项目设置
某些项目设置也对调试产生影响。 这些设置确定诸如调试器查看的目录、用于启动程序的命令和命令参数以及为程序创建的调试信息的类型等内容。 可以在“属性页”对话框中更改这些设置。
在 Visual Studio 中可为调试器行为指定各种设置,包括如何显示变量,是否显示某些警告,如何设置断点以及中断如何影响正在运行的程序。在“选项”对话框中可以指定调试器设置。
设置调试器选项
在“工具”菜单上,单击“选项”。
在“选项”对话框中打开“调试”文件夹。
在“调试”文件夹中选择所需选项的类别。
最常用的选项位于“常规”类别中。
选择或清除所需选项。 按 F1 可获得有关选项的帮助。
“选项”对话框 ->“调试”->“常规”
若要访问“常规”页,请单击“工具”菜单并选择“选项”。在“选项”对话框中,展开“调试”节点并选择“常规”。该页可设置下列常规调试选项。
“选项”对话框 ->“调试”->“编辑并继续”
要访问“编辑并继续”页,请打开“工具”菜单并选择“选项”。在“选项”对话框中,展开“调试”文件夹并选择“编辑并继续”。该页允许为“编辑并继续”设置下列选项。在进行远程调试或跨用户帐户调试时,启用本机“编辑并继续”会带来严重的安全隐患。在这类情况下,启用本机“编辑并继续”会公开一个安全漏洞,该漏洞可能由正在调试的应用程序、在同一计算机上运行的其他应用程序或连接到同一网络的其他计算机上的第三方利用。通过利用此漏洞,恶意方可能会在正在调试的计算机上启动并运行任意代码。除非您信任正在调试的应用程序和计算机以及您连接到的网络,否则请不要启用此功能。
“选项”对话框 ->“调试”->“本机”
若要访问“本机”页,请单击“工具”菜单并选择“选项”。在“选项”对话框中,展开“调试”节点并选择“本机”。该页允许为调试本机应用程序设置下列选项。
Visual Studio 2010 项目中,程序的发行版本和调试版本使用不同的配置。顾名思义,生成调试版本的目的是用于调试,而生成发行版本的目的是用于版本的最终分发。
如果在 Visual Studio 中创建程序,Visual Studio 会自动创建这些配置并设置适当的默认选项和其他设置。在默认设置下:
程序的“调试”配置用全部符号调试信息编译,不进行优化。 优化会使调试复杂化,因为源代码和生成的指令之间的关系更加复杂。
程序的“发布”配置被完全优化,不包含任何符号调试信息。 如果以后还必须调试发行版本,创建 PDB 文件就非常有用。
可使用“标准”工具栏或配置管理器在发行版本和调试版本之间进行切换。
安装 Visual Studio 时,会要求您选择主编程语言的一组开发设置。如果选择“Visual Basic 开发设置”,则选择“调试”或“发布”配置的工具不会出现在工具栏中。如果您从“调试”菜单中选择“开始”,Visual Studio 会自动选择“调试”配置;如果您使用“生成”菜单,则会自动选择“发布”配置。
快速切换到“调试”或“发布”配置
在“标准”工具栏上,选择“解决方案配置”列表框中的“调试”或“发布”。在 Visual Basic 速成版 或 Visual C# 速成版 中没有此工具栏。
切换到“调试”或“发布”配置
在“解决方案资源管理器”中选择项目。
在“视图”菜单上,单击“属性页”。
单击“生成”或“调试”选项卡(在 Visual C# 或 Visual F# 项目中)、“编译”或“调试”选项卡(在 Visual Basic 项目中),或者“配置属性”(在 Visual C++ 项目中)。
在“配置”下拉列表中单击“调试”或“发布”。
C++ 调试配置的项目设置
可在“属性页”对话框中更改 C 或 C++ 调试配置的项目设置, 下表显示“属性页”对话框中与调试器有关的设置的位置。
在“要启动的调试器”列表框中指定要使用的调试器。您的选择将影响属性的可见性。
每当您保存解决方案时,每个调试属性设置均自动写入并保存到解决方案的“每用户”文件 (.vcxproj.user)。
设置
说明
要启动的调试器
指定要运行的调试器,有以下选择:
本地 Windows 调试器
远程 Windows 调试器
Web 服务调试器
MPI 群集调试器
Web 浏览器调试器
“命令”(本地 Windows 调试器)
指定在本地计算机上用于启动要调试程序的命令。
“远程命令”(远程 Windows 调试器)
“应用程序命令”(MPI 群集调试器)
远程计算机上的 .exe 的路径。 可以像在远程计算机上一样输入路径。
“命令参数”(本地 Windows 调试器和远程 Windows 调试器)
“应用程序参数”(MPI 群集调试器)
为前面指定的命令指定参数。
可以在此框中使用下列重定向运算符:
大多数情况下,这些运算符仅适用于控制台应用程序。
工作目录
指定要调试的程序的工作目录(相对于 EXE 所在的项目目录)。 如果保留此设置为空白,则工作目录就是项目目录。 对于远程调试,项目目录将位于远程服务器上。
“附加”(本地 Windows 调试器和远程 Windows 调试器)
指定要启动应用程序还是附加到应用程序。 默认设置为“否”。
“远程服务器名称”(远程 Windows 调试器和 MPI 群集调试器)
指定您要在上面调试应用程序的计算机(不是您的计算机)的名称, 也可以从“进程”对话框中选择此计算机名称。如果在此处指定计算机名称,则还必须在“连接”中指定连接类型。
RemoteMachine 生成宏被设置为此属性的值。
“连接”(远程 Windows 调试器和 MPI 群集调试器)
允许您在远程调试的标准与非身份验证连接类型之间切换。 在“远程服务器名称”框中指定远程计算机的名称。 连接类型包括:
带 Windows 身份验证的远程访问
不带身份验证的远程访问(仅限本机)
注意 不带身份验证的远程调试可能会使远程计算机容易受到安全攻击。Windows 身份验证模式更安全。
HTTP URL(Web 服务调试器和 Web 浏览器调试器)
指定您要调试的项目所在的 URL。
调试器类型
指定要使用的调试器类型:“仅限本机”、“仅限托管”、“混合”、“自动”(默认)或“脚本”。
“仅限本机”适用于非托管 C++ 代码。
“仅限托管”适用于在公共语言运行时下运行的代码(托管代码)。
“混合”对托管代码和非托管代码都调用调试器。
“自动”将根据编译器和 EXE 信息确定调试器类型。
“脚本”调用脚本调试器。
“环境”(本地 Windows 调试器)
为您要调试的程序指定环境变量。 使用标准的环境变量语法(例如,PATH="%SystemRoot%\ … …")。 根据“合并环境”设置的不同,这些变量重写系统环境或与系统环境合并。 当在设置列单击时,出现“编辑…”字样 单击该链接编辑环境变量。
“合并环境”(本地 Windows 调试器)
确定在“环境”框中指定的变量是否与操作系统定义的环境合并。默认设置为“是”。
“SQL 调试”(除 MPI 群集调试器外的所有调试器)
启用 Visual C++ 应用程序中的 SQL 过程的调试。 默认设置为“否”。
设置
说明
调试信息格式
指定要为项目创建的调试信息类型。
默认选项 (/ZI) 以“编辑并继续”的兼容格式创建程序数据库 (PDB)。
设置
说明
优化
指定编译器是否应优化其生成的代码。 优化过程将更改执行的代码。 优化的代码不再与源代码匹配。 因此,调试将变得非常困难。
默认选项(“禁用 (/0d)”)取消优化。您可以在开发时取消优化,并在创建代码的产品版本时再启用优化。
设置
说明
生成调试信息
通知链接器收集调试信息,这些信息具有 /Z7、/Zd、/Zi 或 /ZI 指定的格式。
生成程序数据库文件
在该框中指定 PDB 文件的名称。 必须为“调试信息格式”选择 /ZI 或 /Zi。
去除私有符号
如果不希望在 PDB 文件中包含私有符号,则在该框中指定 PDB 文件的名称。当使用任何生成 PDB 文件的编译器或链接器选项(如 /DEBUG、/Z7 和 /Zd)生成程序图像时,此选项创建第二个程序数据库 (PDB) 文件。或/Zi。这第二个 PDB 文件省略您不希望交付给用户的符号。
生成映射文件
通知链接器在链接过程中生成映射文件。 默认设置为“否”。
映射文件名
如果选择“生成映射文件”,则可在该框中指定映射文件。
映射导出
在映射文件中包含导出函数。 默认设置为“否”。
“可调试程序集”
为链接器 /ASSEMBLYDEBUG 选项指定设置。 可能值如下:
“未产生 Debuggable 特性”。
“运行时跟踪和禁用优化 (/ASSEMBLYDEBUG)”。这是默认设置。
“无运行时跟踪和启用优化 (/ASSEMBLYDEBUG:DISABLE)”。
“<从父级或项目默认设置继承>”。
通过使用 Microsoft.VisualStudio.VCProjectEngine.VCDebugSettings 接口,可以在“配置属性”文件夹(“调试”类别)中以编程方式更改这些设置。
- 使用 Visual Studio 进行调试
- 使用 Visual Studio 进行调试
- 使用Visual Studio 2015 进行远程调试
- 使用 Visual Studio 进行调试之使用断点
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 在Win7下Visual Studio如何使用IIS进行调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 在Visual Studio中使用VMWare插件进行远程调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
- .Net多线程编程—使用Visual Studio 2012进行调试
- .Net多线程编程—使用Visual Studio 2012进行调试
- .Net多线程编程—使用Visual Studio 2012进行调试
- .Net多线程编程—使用Visual Studio 2012进行调试
- 使用Visual Studio Code对Node.js进行断点调试
- MAC 苹果电脑 Xcode文件路径
- 新的代码
- JAVA之MD5加密算法
- 贪心+优先队列
- 1、HTTP监控工具httpry
- 使用 Visual Studio 进行调试
- VIM学习手记1-从命令模式直接进入单词替换修改
- 【C】获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 表格排序——javascript
- CoordinatorLayout源码解析
- python定位
- 文章标题
- pixhawk新增编译选项、板级配置的方法
- 远程连接Hostinger MySQL数据库 setup remote MySQL Workbench connection to Hostinger MySQL database