当前位置:科技动态 > 如何在vs2010中启用调试_vs2010调试

如何在vs2010中启用调试_vs2010调试

  • 发布:2023-09-29 14:13

1.简介

对于刚开始学习C++的人来说,程序调试是一项必备技能。尤其是对于C++这样难学的语言来说,程序调试的基本方法就显得更加关键了。毕竟,没有人希望自己辛苦敲了一整天的代码因为一些小bug而被废弃。如何在复杂的代码中发现微小的bug,就是我们今天学习的目的。话不多说,让我们开始代码调试的学习吧!注:本课程使用VS2010作为IDE,但讲解的概念和方法是通用的,适用于所有IDE。

2。一些基本概念

在开始课程之前,有几个概念我们必须清楚。分别是:断点、一步一步、一步步、一步步、跳出、继续。读者不妨先自己思考一下这些概念的内涵。

1。断点(Breakpoint)

这是一个非常抽象的概念,并没有官方的定义。我们只需要知道,当我们按下调试按钮(VS快捷键是F5)时,程序会自动执行断点之前的所有代码,直到停在断点处。这是我们调试的第一步。如果不设置断点,程序就会直接执行到最后,所以没有“调试”的意义。再次强调,设置断点是调试程序的第一步!设置断点的快捷键是F9。还有一个非常有趣的现象。大多数IDE都将断点直接标记在某行前面,但VS2010似乎有点不同。细心的读者可以自己做一下,然后你会发现,哎,为什么VS2010的断点虽然显示第XX行,但好像是在两行之间呢。读者可以结合上面断点概述想一下VS2010为什么要这样做,这样做有什么好处。

2。跨过去,跨进去(跨过去,跨进去)

我不会详细解释它们的定义,只是它们的字面意思。我想问的是,它们有什么区别?读者,请你仔细想一想,然后回答我。嘻嘻,其实看英文名就知道了。当一个函数遇到单步执行(step over)时,就会结束,即整个函数会一口气执行完。当step into语句遇到函数时,就进入该函数。按step into(快捷键为F11)即可执行函数体中的一行代码。另外,步进的快捷键是F10。再次强调,无论是哪一个,都必须先设置断点。

3.走出去

跳出来是什么意思?当然是跳出函数了。当你在函数内部执行step out时,程序将直接执行整个函数并停留在函数调用语句的下一行(实际上是在函数调用语句和下一条语句之间)。单步退出快捷键shift+F11。

4.继续

这很简单。当您设置多个断点并按继续时,程序执行将在第一个断点处停止。再按一次,程序执行将在下一个断点之前停止。快捷键是F5。

3。调试的基本方法

好了,到此为止,大家概念上都没有问题了,那么调试方法就呼之欲出了。

第一步:根据编译器的错误信息适当设置断点。步骤2:按继续,将watch中变量的值与您的预期进行比较,看看是否有错误。第三步:合理选择逐进程调试(stop over)或逐行调试(step into)来查找错误。

不断重复以上步骤,相信你一定能找到程序中的所有Bug。

注:如果读者觉得这篇博客有帮助,请收藏。

掌握 VS2010 调试 -- 入门指南

参考自:?http://www.sychzs.cn/kingzone_2008/article/details/8133048

1 简介

在软件开发周期中,测试和纠正缺陷(缺陷,缺陷与bug的区别:Bug是缺陷的一种表现,一个缺陷可以导致多个bug)所花费的时间比编写代码要多得多。时间。通常,调试是指发现缺陷并纠正它们的过程。修复缺陷之后进行调试,或者两者是相关的。如果代码中存在缺陷,我们首先需要找出缺陷的根本原因。这个过程称为调试。一旦找到根本原因,就可以纠正缺陷。

那么如何调试代码呢? Visual Studio 提供了许多用于调试的工具。有时调试需要花费大量时间才能确定根本原因。 VS提供了很多方便的工具来辅助调试。调试器包括错误列表、添加断点、可视化程序流程、控制执行流程、数据提示、监视窗口、多线程调试、线程窗口、并行调试概述和 IntelliTrace 调试概述。希望本文能够对调试功能的用户有所帮助。请注意,本文使用VS2010。一些功能在旧版本中是一致的,但 VS2010 添加了许多新功能(标记断点、固定数据提示、多线程调试、并行调试和 IntelliTrace)。

2 如何开始调试?

可以通过VS的“调试”菜单开始调试。点击调试菜单下的“开始调试”或按F5键启动。如果您在代码中添加了断点,执行将自动开始。

图开始调试

“附加到进程”是另一种开始调试的方法。 Attach Process 启动应用程序的调试会话。也许我们更熟悉 www.sychzs.cn Web 应用程序的 Attach Process 调试。我还发表了另外两篇相关帖子。如下:

调试托管在 IIS 上的 www.sychzs.cn 应用程序远程 IIS 调试:调试托管在“远程 IIS 服务器”上的 www.sychzs.cn 应用程序

通常我们通过在可能存在问题的代码处添加断点来开始调试。那么让我们从断点开始。

3 断点(Breakpoint)

断点用于告诉调试器何时何地暂停程序执行。通过单击左列或按 F9 键在当前行添加断点。在添加断点之前,您需要知道代码中会出现哪些错误以及执行将在哪里停止。当调试器到达断点时,您可以使用其他调试工具来检查代码中发生错误的位置。

图设置断点(Set Breakpoint)

3.1 使用断点调试

您已在要暂停执行的位置设置了断点。现在按F5键开始调试。当程序到达断点时,执行将自动暂停。此时,您可以通过多种方法来检查代码。命中断点后,断点所在行变为黄色,表示接下来将执行该行。

在中断模式下,您有多个可用命令。使用相应的命令进行进一步的调试。

图片断点工具栏(Breakpoint工具栏)

3.1.1 越过

调试器到达断点后,您可能需要逐条执行代码。

“Step Over”[F10]命令用于逐条执行代码。这将执行当前突出显示的行,然后暂停。如果在方法调用语句突出显示时按 F10,执行将在调用语句后面的语句处停止。 Step Over 将立即执行整个方法。

图片:跨过 - F10

3.1.2 进入

与 Step Over 类似。唯一的区别是,如果当前突出显示的语句是方法调用,则调试器将进入该方法。快捷键是

“F11”。

图:步入-F11

3.1.3 退出

当您在方法内部进行调试时使用。如果您在当前方法中按

Shift - F11,调试器完成该方法的执行,然后在调用该方法的语句后面的语句处暂停。

3.1.4 继续

这就像重新执行你的程序。它继续程序执行,直到遇到下一个断点。快捷键是

“F5”。

3.1.5 设置下一个语句

这是一个非常有趣的功能。设置下一个语句可以让您

更改程序的执行路径。如果你的程序在某一行暂停并且你想改变执行路径,

跳转到指定行,在该行上单击鼠标右键,在右键菜单中选择“”

设置下一个语句”。这将导致程序跳转到该行执行,而不执行前面的代码。这在以下情况下非常有用:当您发现代码中的某些行可能导致程序中断时(break) 并且你不希望程序在此时中断。快捷键是

Ctrl + Shift + F10。

图:设置下一条语句

3.1.6 显示下一条语句 [Ctrl+*])

该线标有黄色箭头。该行是程序继续执行时将执行的下一条语句。

3.2 断点标记

这是VS2010提供的新功能。为了更好地管理断点。它使我们能够更好地分组和过滤断点。这就像对断点进行分类。如果我们添加与某个功能相关的不同类型的断点,我们可以根据需要启用、禁用和过滤这些断点。例如,假设我们要调试一段代码。

课程?节目?? ????{?? ?????????static?void?Main(string[]?args)?? ?????????{?? ????????????string[]?strNames?=?{?"Name1",?"Name2",?"Name3",?"Name4",?"Name5",?"Name6" ?};?? ?? ????????????foreach?(字符串?名称?in?strNames)? ????????????{?? ???????????????Console.WriteLine(name);???//?BreakPoint?? ????????????}?? ????????????int?temp?=?4;?? ????????????for?(int?i?=?1;?i?<=?10;?i++)?? ????????????{?? ????????????????if?(i?>?6)?? ????????????????????? 温度 ?=?5;?? ????????????}?? ?????????}?? ?? ?????????public?static?void?Method1()?? ?????????{?? ????????????Console.WriteLine("Break?Point?in?Method1");???//?BreakPoint?? ?????????}?? ?? ?????????public?static?void?Method2()?? ?????????{?? ????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint?? ????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint?? ?????????}?? ?? ?????????public?static?void?Method3()?? ?????????{?? ????????????Console.WriteLine("Break?Point?in?Method3");??//?修?? ?????????}?? ?????}??

程序的执行将在第一个断点处停止。下图给出了断点列表。

图片:断点列表

在上图中,标签栏为空。下面介绍如何设置断点标签以及如何使用标签。您可以为任何断点设置标签,只需右键单击特定代码行的断点符号 (①) 或在断点窗口中设置它 (②)。

图片:设置断点标签(Setting Breakpoint Label)

右键单击​​断点,然后单击编辑标签可为任意断点添加标签。对于示例代码,我为所有断点标签指定了易于理解的名称。

图片:添加断点标签(Adding Breakpoint Label)

这些标签如何帮助我们调试?现在,所有断点均已启用。如果不想调试方法二,通常需要在相应的方法中一一取消断点,但这里可以通过标签名称过滤或搜索断点,然后选择它们,就可以方便地取消。

图:使用标签过滤断点(Filter Breakpoint using Labels)

断点标签的介绍到此结束。我给出的例子很简单,但是当你调试大量代码、多个项目等时,断点标签非常有用。

3.3 条件断点(条件Breakpoint)

假设您正在多次迭代(循环)中处理数据,并且您只想调试某些迭代。这意味着您想要根据某些特定条件暂停您的程序。 Visual Studio 断点允许您设置条件断点。当且仅当满足条件时调试器才会停止。

首先,您需要在要暂停执行的位置设置断点。然后右键单击红色断点图标。单击右键菜单中的“条件”。

图片:设置断点条件(Set Breakpoint Condition)

点击右键菜单中的“条件”后,会弹出如下对话框,设置断点条件。

图片:断点条件设置

假设您要调试以下代码块:

课程?节目?? ????{?? ?????????static?void?Main(string[]?args)?? ?????????{?? ?? ??????string?[]?strNames?=?{?"Name1","Name2",?"Name3",?"Name4",?"Name5",?"Name6"};?? ? ????????????foreach(字符串?名称?in?strNames)?? ????????????{?? ?????????? ??????Console.WriteLine(name);?//?Breakpoint?在?这里?? ????????????}?? ?????????}? ??????}???

您在 Console.WriteLine() 语句处设置断点。执行程序时,每个for-each循环都会停止。如果您希望代码仅在 name="Name3" 时停止怎么办?很简单,你只需使用条件name.Equals("Name3")。

图片:设置断点条件

查看断点符号。它应该看起来像断点符号内的加号 (+),这表明该断点是条件断点。

图:条件断点符号(Conditional Breakpoint Symbol)

设置断点的条件后,调试程序时,只有满足给定的条件时,调试器才会停止。

图片:条件断点命中

条件输入框自动补全(智能感知):上面给出的断点条件非常简单,可以很方便地写入条件文本框。有时您可能需要定义大型且复杂的条件。别担心,VS还提供了条件文本输入框的自动补全功能。因此,在条件框中键入就像在编辑器中一样简单。如下所示。

图:条件文本框自动补全(条件文本框智能感知)

我几乎涵盖了有关条件断点的所有内容。除了这个。条件窗口中有两个选项:

是真的已经改变了

我们见过

这就是“为真”选项的目的。

“已更改”用于当某些值更改为某些特定值时想要停止时。

3.4 导入/导出断点(Import/Export Breakpoint)

3.5 断点命中次数(Breakpoint命中次数)

3.6 Breakpoint被击中

3.7 断点过滤器(Breakpoint过滤器)

您可以将断点限制为仅特定进程或线程。这在调试多线程程序时非常有用。右键单击断点并选择

单击“过滤器”打开过滤器窗口。

图片:断点滤镜(Breakpoint滤镜)

过滤规则中可以设置进程名、进程ID、机器名、线程ID等,具体使用方法我会在多线程调试章节详细介绍。

4 数据提示

Data Sticky 是一种高级粘性消息,用于在应用程序调试期间查看对象和变量。当调试器到达断点时,当您将鼠标移动到对象或变量上时,您将看到它们的当前值。您甚至可以看到一些复杂对象(例如数据集、数据表等)的详细信息。数据注释的左上角有一个“+”号,用于展开其子对象或值。

图片:调试期间的数据提示

几个月前,我发表了一篇关于

的文章

VS 2010 DataTip 调试技巧文章。

以下是调试时有用的一些功能。

4.1 值调试期间的引脚检查

4.2 拖放引脚数据提示

4.3 添加评论

4.4 上次会话调试值

4.5 导入导出数据提示

4.6 使用数据提示更改值

4.7 清除数据提示

5 个观看窗口

5.1 局部变量(Locals)

列出当前方法中的所有变量。当调试器停在特定断点并打开 Autos 窗口时,将显示当前作用域中与该值相关的变量。

图片:局部变量

5.2 自动

VS 调试器在调试过程中会自动检测到这些变量。 VS 检测与当前语句相关的对象或变量,并据此列出 Autos 变量。自动变量的快捷键是 Ctrl + D + A。

图片:自动 - Ctrl + D、A

5.3 手表

监视窗口用于添加变量。您可以添加任意数量的变量。要添加,请右键单击该变量并选择“添加到监视”。

图片:观看 - Ctrl + D、W

还可以使用拖放将变量添加到监视窗口。要从监视窗口中删除变量,请右键单击该变量并选择“删除监视”。这些变量值也可以在运行时通过调试窗口进行编辑。

有4个监控窗口可以同时使用。图:多个监控窗口

如果变量包含对象实例,左侧会有“+”号,可以查看该对象的属性和成员。

图:展开监控变量

5.3.1 创建对象 ID

Visual Studio 调试器提供了另一个强大的功能,它允许我们为任何特定的对象实例创建对象 ID(对象 ID)。这可用于随时监视任何对象,即使该对象位于范围之外。右键单击监视窗口中的特定对象变量,然后单击“

创建对象 ID”以创建对象 ID。

图:创建对象ID

为特定对象变量创建对象 ID 后,Visual Studio 会向该对象添加一个数字和“#”号来表示它。

图片:添加Object ID后

5.4?

6 即时窗口

立即窗口是开发人员中常用的功能。它可以修改变量值或执行一些语句,而不改变当前的调试步骤。我们可以通过菜单来做到这一点

调试 > 窗口 > 立即窗口打开立即窗口。立即窗口支持一组可以在调试时随时执行的命令。它还支持智能感知。在调试过程中,我们可以在立即窗口中执行任何命令或代码语句。

图片:基本即时窗口

这是所有开发人员最常见的功能,因此我不会一一介绍立即窗口中的每个命令。

7 调用堆栈

8 调试多线程程序

8.1 探索线程窗口

8.2 仅标记我的代码

8.3 断点过滤器 - 多线程调试

9 调试并行程序

9.1 并行任务和并行堆栈

10 使用 IntelliTrace 进行调试

10.1 概述

10.2 使用 IntelliTrace 进行映射

10.3 过滤 IntelliTrace 数据

11 个 VS 调试的实用快捷键

Shortcut Keys Descriptions Ctrl-Alt-V, A Displays the Auto window Ctrl-Alt-B Displays the Breakpoints dialog Ctrl-Alt-C Displays the Call Stack Ctrl-Shift-F9 Clears all of the breakpoints in the project Ctrl-F9 Enables or disables the breakpoint on the current line of code Ctrl-Alt-E Displays the Exceptions dialog Ctrl-Alt-I Displays the Immediate window Ctrl-Alt-V, L Displays the Locals window Ctrl-Alt-Q Displays the Quick Watch dialog Ctrl-Shift-F5 Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session. Ctrl-F10 Starts or resumes execution of your code and then halts execution when it reaches the selected statement. Ctrl-Shift-F10 Sets the execution point to the line of code you choose Alt-NUM * Highlights the next statement F5 If not currently debugging, this runs the startup project or projects and attaches the debugger. Ctrl-F5 Runs the code without invoking the debugger F11 Step Into Shift-F11 Executes the remaining lines out from procedure F10 Executes the next line of code but does not step into any function calls Shift-F5 Available in break and run modes, this terminates the debugging session Ctrl-Alt-H Displays the Threads window to view all of the threads for the current process F9 Sets or removes a breakpoint at the current line Ctrl-Alt-W, 1 Displays the Watch 1 window to view the values of variables or watch expressions Ctrl-Alt-P Displays the Processes dialog, which allows you to attach or detach the debugger to one or more running processes Ctrl-D,V IntelliTrace Event 到此本文结束。希望你喜欢本文。请分享你的反馈和建议。

12 深入学习(Further Study)

Debugging Task-Based Parallel Applications in Visual Studio 2010 By Daniel Moth and Stephen ToubDebugging With IntelliTrace

13 总结(Summary)

本文介绍了调试过程的基本内容。介绍了如何使用VS调试一个应用程序。我解释了几乎所有重要的工具以及它们的使用方法。对于并行程序调试,我只讲了基础部分。在深入学习小节中,深入讲解了并行调试过程。如果你感兴趣,请阅读。我的主要目的是涵盖Visual Studio中提供的几乎所有调试工具。希望你从本文中学到了一些新知识。

?

“自动窗口”(Autos):当前使用的变量

“局部窗口”(Locals):在范围内的所有变量

“监视N”(Watch):可定制(N从1到4)

?

Step Into(逐语句):执行并移动到下一条语句(实际上,跳入上一条语句的代码块,此代码块的第一条)

Step Over(逐过程):执行并跳到下一条语句,但不进入上一条语句的代码块

Step Out(跳出):执行到代码块结尾

?

命令窗口(Command)

即时窗口(Immediate):主要用于计算表达式

参考资料:

[1]?Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

[2]?bug和缺陷的区别

1 导言

在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。通常,debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后,或者说二者是相关的。如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过程就称作调试(debugging)。找到根本原因后,就可以修正缺陷。

那么如何调试代码呢?Visual Studio提供了很多用于调试的工具。有时调试需要花费大量时间去识别root cause。VS提供了许多辅助调试的便捷的工具。调试器(Debugger)包含错误列表、添加断点、可视化的程序流程、控制执行流程、Data Tips、监视窗口(watch windows)、多线程调试、线程窗口、并行调试概览以及IntelliTrace调试概览。我希望本文能够对调试功能的使用者有所裨益。请注意,本文使用VS2010。某些功能在旧版本中也是一致的,但是VS2010新增了许多features(Labeling breakpoint, Pinned DataTip, Multithreaded Debugging, Parallel debugging and IntelliTrace)。

2 如何启动调试?

可以通过VS的调试(Debug)菜单启动调试。点击调试菜单下的“启动调试”或者按F5键启动。如果你已经在代码中加入了断点,那么执行会自动开始。

图 启动调试(Start Debugging)

“附加到进程(Attach to Process)”是另一种启动调试的方法。Attach Process会为应用程序启动一个调试会话。可能我们更熟悉www.sychzs.cn Web应用的Attach Process调试。我发了另外两篇相关的帖子。如下:

?

Debug Your www.sychzs.cn Application that Hosted on IISRemote IIS Debugging: Debug your www.sychzs.cn Application which is hosted on "Remote IIS Server"

?

通常我们通过在可能存在问题代码处加断点来启动调试。因此,我们从断点开始讲起。

3 断点(Breakpoints)

断点用于通知调试器何时何处暂停程序的执行。通过点击左边栏或者按F9键在当前行添加断点。在加断点之前,你需要知道你的代码将会出现什么错误,在什么地方停止执行。当调试器执行到断点处时,你可以使用其他的调试工具核对代码何处出现错误。

图 设置断点(Set Breakpoint)

3.1 使用断点进行调试

你已经在你想要暂停执行的地方设置了断点。现在按F5键启动调试,当程序执行到断点处时,自动暂停执行。此时你有多种方式来检查代码。命中断点(hit the breakpoint)后,加断点的行变为黄色,意指下一步将执行此行。

在中断模式下,你有多条可使用的命令,使用相应命令进行进一步的调试。

图 断点工具条(Breakpoint Toolbar)

3.1.1 逐过程(Step Over)

调试器执行到断点后,你可能需要一条一条的执行代码。”Step Over“[F10]命令用于一条一条的执行代码。这将执行当前高亮的行,然后暂停。如果在一条方法调用语句高亮时按F10,执行会停在调用语句的下一条语句上。Step Over会一次整个方法。

图: 逐过程(Step Over - F10)

3.1.2 逐语句(Step Into)

它与Step Over相似。唯一的不同是,如果当前高亮语句是方法调用,调试器会进入方法内部。快捷键是”F11“。

图: 逐语句(Step Into - F11)

3.1.3 跳出(Step Out)

当你在一个方法内部调试时会用到它。如果你在当前方法内按Shift - F11,调试器会完成此方法的执行,之后在调用此方法的语句的下一条语句处暂停。

3.1.4 继续(Continue)

它像是重新执行你的程序。它会继续程序的执行直到遇到下一个断点。快捷键是”F5“。

3.1.5 设置下一语句(Set Next Statement)

这是一个非常有趣的特性。设置下一语句允许你在调试的时候改变程序的执行路径。如果你的程序在某一行处暂停而且你想改变执行路径,跳到指定行,在这一行上右击,在右击菜单中选择”设置下一语句“。这样程序就会转到哪一行执行而不执行先前的代码。这在如下情况中非常有用:当你发现代码中某些行可能会导致程序的中断(break)而你不想让程序在那个时候中断。快捷键是Ctrl + Shift + F10。

图: 设置下一语句(Set Next Statement)

3.1.6 显示下一语句(Show Next Statement [Ctrl+*])

这一行用黄色箭头标记。这行是程序继续执行时下一条将执行的语句。

3.2 断点标签(Labeling in Break Point)

这是VS2010提供的新特征(feature)。用于更好的管理断点。它使得我们能够更好的分组和过滤断点。这像是对断点的归类。如果我们添加了与某一功能相关的不同类型的断点,我们可以根据需要使能(enable)、取消(disable)、过滤(filter)这些断点。例如,假设我们要调试一下代码块。

[csharp]?view plaincopy

class?Program??????{??????????static?void?Main(string[]?args)??????????{??????????????string[]?strNames?=?{?"Name1",?"Name2",?"Name3",?"Name4",?"Name5",?"Name6"?};????????????????foreach?(string?name?in?strNames)??????????????{??????????????????Console.WriteLine(name);???//?BreakPoint??????????????}??????????????int?temp?=?4;??????????????for?(int?i?=?1;?i?<=?10;?i++)??????????????{??????????????????if?(i?>?6)??????????????????????temp?=?5;??????????????}??????????}????????????public?static?void?Method1()??????????{??????????????Console.WriteLine("Break?Point?in?Method1");???//?BreakPoint??????????}????????????public?static?void?Method2()??????????{??????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint??????????????Console.WriteLine("Break?Point?in?Method2");??//?BreakPoint??????????}????????????public?static?void?Method3()??????????{??????????????Console.WriteLine("Break?Point?in?Method3");??//?Breakpoint??????????}??????}??

执行程序将停在第一个断点处。下图给出了断点列表。

图: 断点列表

上图中Labels列都为空。下面介绍如何给断点设置标签(label)以及如何使用标签。只需在特定代码行的断点符号上右击(①)或者在断点窗口中设置(②)即可对任何断点设置标签。

图: 设置断点标签(Setting Breakpoint Label)

右击断点,点击编辑标签(Edit Labels),即可对任意断点添加标签。对于示例代码,我为所有断点的标签起了易于理解的名字。

图: 添加断点标签(Adding Breakpoint Label)

这些标签如何辅助我们调试呢?现在,所有断点都是使能的(enabled)。如果你不想调试method2,一般情况下你必须去对应的方法中一个一个的取消断点,但这里你可以通过标签名过滤或者搜索它们,然后选中它们以方便的取消它们。

图: 使用标签过滤断点(Filter Breakpoint Using Labels)

断点标签到此介绍完毕。我举的例子非常简单,但是断点标签在你调试大量代码,多个工程等情况下非常有用。

3.3 条件断点(Conditional Breakpoint)

假设你在多次迭代(循环)处理数据而你只想调试其中某几次迭代。这意味着你想根据某些特定条件暂停你的程序。Visual Studio断点允许你设置条件断点。当且仅当条件满足时,调试器才会停住。

首先,你需要在你想暂停执行处设置断点。然后右击红色的断点图标。右键菜单中点击”条件“。

图: 设置断点条件(Set Breakpoint Condition)

点击右键菜单中的”条件“后,会弹出下面的对话框设置断点的条件。

图: 断点条件设置

假设你要调试下面的代码块:

[csharp]?view plaincopy

class?Program??????{??????????static?void?Main(string[]?args)??????????{???????????string?[]?strNames?=?{?"Name1","Name2",?"Name3",?"Name4",?"Name5",?"Name6"};????????????????foreach(string?name?in?strNames)??????????????{???????????????????Console.WriteLine(name);?//?Breakpoint?is?here??????????????}??????????}??????}??

你在Console.WriteLine()语句处设置了断点。当执行程序时,每次for-each循环都会停住。如果你想让代码只在name="Name3"时停住,该怎么办呢?非常简单,你只需使用条件name.Equals("Name3")。

图: 设置断点条件

查看断点符号。它应该看上去像是一个加(+)号在断点符号内部,这表示该断点是条件断点。

图: 条件断点符号(Conditional Breakpoint Symbol)

设置断点的条件之后,在调试程序,调试器只会在满足给定条件时才停住。

图: 条件断点命中(Conditional Breakpoint hit)

条件输入框的自动补全(intellisense):上面给出的断点条件非常简单,可以非常容易的写到条件文本框中。有时你可能需要定义很大很复杂的条件。不必担心,VS为条件文本输入框也提供了自动补全功能。因此,在条件框中输入就像是在编辑器中一样方便。如下图。

图: 条件文本框的自动补全(intellisense in condition textbox)

我几乎讲解了条件断点的所有内容。除了下面这点。在条件窗口中有两个选项:

Is TrueHas Changed

我们已经看到”Is True“选项的用途了。”Has Changed“用在当你想在某些值变为某些特定值的时候停住。

3.4 导入/导出断点(Import / Export Breakpoint)

3.5 断点命中计数(Breakpoint Hit Count)

3.6 Breakpoint When Hit

3.7 断点筛选器(Breakpoint Filter)

你可以限制断点只对特定进程或线程有效。这在进行多线程程序的调试时非常有用。右击断点选”筛选器“即可打开筛选器窗口。

图: 断点筛选器(Breakpoint Filter)

在筛选规则中,你可以设置进程名,进程Id,机器名,线程ID等。我会在多线程调试小节中详述其用法。

4 数据便签(Data Tip)

数据便签是应用程序调试期间用于查看对象和变量的一种高级便签消息。当调试器执行到断点时,将鼠标移到对象或者变量上方时,你会看到它们的当前值。你甚至可以看到一些复杂对象(如dataset,datatable等等)的细节。数据便签左上角有一个“+”号用于展开它的子对象或者值。

图: 调试时的数据便签(DataTips During Debugging)

几个月前,我发过一篇关于VS 2010 DataTip Debugging Tips的文章。

下面是一些在调试时有用的特性。

4.1 Pin Inspect Value During Debugging

4.2 Drag-Drop Pin Data Tip

4.3 Adding Comments

4.4 Last Session Debugging Value

4.5 Import Export Data Tips

4.6 Change Value Using Data Tips

4.7 Clear Data Tips

5 监视窗口(Watch Windows)

5.1 局部变量(Locals)

列出当前方法中的所有变量。当调试器停在某特定断点并打开Autos窗口时,将展示当前范围中与此值相关的变量。

图:Local Variables

5.2 自动窗口(Autos)

这些变量由VS调试器在调试的时候自动检测。VS检测与当前语句相关的对象或变量,基于此列出Autos变量。Autos Variable的快捷键是Ctrl + D + A。

图:Autos - Ctrl + D, A

5.3 监视(Watch)

Watch窗口用于添加变量。你可以添加任意多个变量。添加方法是,右击变量并选择“Add to Watch”。

图:Watch - Ctrl + D, W

也可以使用拖放(Drag and Drop)将变量添加到监视窗口中。从监视窗口中删除变量的方法是,右击变量并选择“Delete Watch”。通过调试窗口,也可以在运行时编辑这些变量值。

有4个可同时使用的监视窗口。 图:多个监视窗口

若果变量中含有对象实例,左边会有一个“+”号用于查看对象的属性和成员。

图:展开监视变量

5.3.1 Creating Object ID

Visual Studio调试器提供另外一个强大的功能,支持我们为对象的任何一个特定实例创建一个对象ID(object ID)。这可以用于在任何时间监控任意对象,甚至是该对象位于范围(scope)之外。在监视窗口(watch window)右击特定对象变量,再单击“Make Object ID”即可创建Object ID。

图: 创建Object ID

在对特定对象变量创建Object ID之后,Visual Studio会给这个对象添加一个数码和“#”号,用来表示。

图:添加Object ID后

5.4?

6 即时窗口(Immediate Window)

即时窗口是开发人员常用的功能。它可以在不改变当前调试步骤的情况下修改变量值或者执行一些语句。我们可以通过菜单调试 > 窗口 > 即时(Debug > Window > Immediate Window)打开即时窗口。即时窗口支持一组命令,可在调试的任何时刻执行。它也支持Intellisense。在调试期间,我们可以在即时窗口中执行任何命令或者代码语句。

图:基本即时窗口(Basic Immediate Window)

这是对所有开发人员来说最为常用的特性,因此我就不一一介绍即时窗口的每一条命令了。

7 调用堆栈(Call Stack)

8 调试多线程程序(Debugging Multithreaded Program)

8.1 Exploring Threads Window

8.2 Flag Just My Code

8.3 Break Point Filter - Multithread Debugging

9 调试并行程序(Debugging Parallel Program)

9.1 Parallel Task and Parallel Stacks

10 Debugging with IntelliTrace

10.1 Overview

10.2 Mapping with IntelliTrace

10.3 Filter IntelliTrace Data

11 调试常用快捷键(Useful Shortcut Keys For VS Debugging)

Shortcut KeysDescriptionsCtrl-Alt-V, ADisplays the Auto windowCtrl-Alt-BDisplays the Breakpoints dialogCtrl-Alt-CDisplays the Call StackCtrl-Shift-F9Clears all of the breakpoints in the projectCtrl-F9Enables or disables the breakpoint on the current line of codeCtrl-Alt-EDisplays the Exceptions dialogCtrl-Alt-IDisplays the Immediate windowCtrl-Alt-V, LDisplays the Locals windowCtrl-Alt-QDisplays the Quick Watch dialogCtrl-Shift-F5Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session.Ctrl-F10Starts or resumes execution of your code and then halts execution when it reaches the selected statement.Ctrl-Shift-F10Sets the execution point to the line of code you chooseAlt-NUM *Highlights the next statementF5If not currently debugging, this runs the startup project or projects and attaches the debugger.Ctrl-F5Runs the code without invoking the debuggerF11Step IntoShift-F11Executes the remaining lines out from procedureF10Executes the next line of code but does not step into any function callsShift-F5Available in break and run modes, this terminates the debugging sessionCtrl-Alt-HDisplays the Threads window to view all of the threads for the current processF9Sets or removes a breakpoint at the current lineCtrl-Alt-W, 1Displays the Watch 1 window to view the values of variables or watch expressionsCtrl-Alt-PDisplays the Processes dialog, which allows you to attach or detach the debugger to one or more running processesCtrl-D,VIntelliTrace Event

到此本文结束。希望你喜欢本文。请分享你的反馈和建议。

12 深入学习(Further Study)

Debugging Task-Based Parallel Applications in Visual Studio 2010 By Daniel Moth and Stephen ToubDebugging With IntelliTrace

13 总结(Summary)

本文介绍了调试过程的基本内容。介绍了如何使用VS调试一个应用程序。我解释了几乎所有重要的工具以及它们的使用方法。对于并行程序调试,我只讲了基础部分。在深入学习小节中,深入讲解了并行调试过程。如果你感兴趣,请阅读。我的主要目的是涵盖Visual Studio中提供的几乎所有调试工具。希望你从本文中学到了一些新知识。

?

“自动窗口”(Autos):当前使用的变量

“局部窗口”(Locals):在范围内的所有变量

“监视N”(Watch):可定制(N从1到4)

?

Step Into(逐语句):执行并移动到下一条语句(实际上,跳入上一条语句的代码块,此代码块的第一条)

Step Over(逐过程):执行并跳到下一条语句,但不进入上一条语句的代码块

Step Out(跳出):执行到代码块结尾

?

命令窗口(Command)

即时窗口(Immediate):主要用于计算表达式

参考资料:

[1]?Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

[2]?bug和缺陷的区别

相关文章

热门推荐