VS2010断点设置技巧

***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

***************************************************


许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单,却能帮你节约大量的时间。

一、跳到当前光标处(Ctrl+F10)

我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。

这时,你应该利用“跳到当前光标处”这个功能。先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。你再也不用按许多次F10/F11了。即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。

二、条件中断

另一种常见的情况是:开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。

针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。

如何设置条件断点

设置条件断点非常容易。在特定的行上,按F9设置断点。

然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“Condition…”。


这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当局部变量paginatedDinners的尺寸小于10时,调试才中断。我们可以写出如下的表达式:


现在我再运行这个程序,实现搜索,只有返回值小于10时,程序运行才会被中断。对于大于10的值,该断点将被跳过。

三、记录到达断点次数

有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第五次返回少于10份晚餐的查询结果时,中断程序运行。
可以通过右击断点,然后在弹出菜单上选择“Hit count…”菜单命令实现。

这时系统弹出一个对话框,它允许你指定:(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。

四、机器/线程/进程过滤

设置如下:右击断点;在弹出菜单上选择“Filter…”菜单命令;然后指定命中断点的特定条件:在指定的机器上、或指定的进程中、或指定的线程中。

跟踪点—进入断点时的自定义操作

许多人不知道“跟踪点(TrackPoints)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

我将用一个简单的控制台程序来演示如何使用“跟踪点”。如下是Fibonacci数列的一个递归实现:

以上程序中,我们使用Console.WriteLine() 输出针对特定输入值生成的最终斐波那契数列。如果希望在调试器里观察操作中每一次递归运算后的数列而又不实际中断程序运行,该怎么办呢?“跟踪点”可以轻松实现。

设置跟踪点

你可以在特定的行上,按F9加跟踪点。然后
右击断点,在上下文菜单中选择“When Hit…”:

在弹出对话框上,你可以设置命中该断点时,所触发的事件。

在上面例子中,我们设定一旦命中断点时就打印追踪信息。注意,我们已经把局部变量“x”的值,作为追踪信息的一部分输出。局部变量可以通过{变量名}语法输出。你还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追踪信息中输出常用的调试值。

在上例中,我们同时选中了底端的“continue execution“选项,这说明我们不希望程序中断调试状态,而是继续运行。唯一的不同是:每次断点条件满足时,我们的自定义追踪信息都将被输出。

现在当我们运行程序时,会发现自定义追踪信息自动显示在Visual Studio的“输出“窗口里。这让我们很容易看到程序的递归调用过程:

你也可以选择往应用程序中添加一个自定义追踪信息的监听器。这时追踪点的输出信息将通过它输出,而不是Visual Studio的“输出“窗口。

五、跟踪点—运行自定义的宏

当命中跟踪点时,能否自动输出所有的局部变量?

Visual Studio中并没有这样的内置功能,但我们可以写一个自定义宏来实现,然后在命中跟踪点时调用该宏。这个的实现需要先打开Visual Studio的宏编辑器(工具->宏->宏IDE菜单命令),然后在项目资源管理器的MyMacros节点下选择一个模块或创建新模块(如:加个名为“UsefulThings”的模块),再把下面的VB宏代码贴到模块中并保存。
Sub DumpLocals()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object

Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame = DTE.Debugger.CurrentStackFrame

outputWindow.ActivePane.OutputString(“*Dumping Local Variables*” + vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString(exp.Name + ” = ” + exp.Value.ToString() + vbCrLf)
Next
End Sub
上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

使用自定义的“DumpLocals”宏

然后,我们可以在如下的一个简单程序中使用刚定制的“DumpLocals”宏了:

上述代码中,我们用F9在“Add”方法的返回值处加了个断点,然后右击断点,在弹出菜单上选择“When hit”。

将显示如下对话框。和之前不一样, 我们不选“Print a message”选项,也不手工设定需要输出的变量;而是选择“Run a marco”复选框,并指定到我们上面创建的UsefulThings.DumpLocals宏上:

为了使程序能在命中跟踪点后仍继续运行,我们将继续选中“continue execution”复选框。

运行程序

现在按F5运行程序,当“Add”方法被调用时,我们会在Visual Studio的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS应用开发版本控制工具之Versions使用,iosversions

Versions版本控制工具破解版(Versions.zip)下载请见本博文附件。下载后在MAC安装完以后,图标是莲花状。见下图: 双击运行如下图: 点击Repository,连接SVN服务器Repository(服务器端采用的是SVN服…

php form action跳转,form表单页面跳转方式提交练习

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//form表单提交练习/*新建一个form.html网页用来书写前端HTML表单*/表单提交练习姓名:年龄:电话:地址:QQ:自我评价://以上功能可自己添加或修改/*在form.html网页的基础上新建一个foms.php网页关联之前的form.html网页并书写php测试…

VS2010调试快捷键

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com *************************************************** vs2010 调试快捷键 命令名 快捷键 说明 调试.应用代码更改 Alt F10 启动生…

什么是算法,什么是数据结构

尽管已经学了几年,对它们也可以说大致懂得。但是,作为非计算机专业的人员,还是不会比计算机专业人员懂得多。既然没有受过专门的学习训练,自然会有三天打鱼两天晒网的感觉,一天可能冒出一个念头。于是乎,写…

如何在多web服务器共享SESSION数据

2019独角兽企业重金招聘Python工程师标准>>> 一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的&#xff0…

grpc php 返回值过大,使用grpc实现php、java、go三方互调

grpc作为经典的rpc协议,虽然略重,但是是有学习的价值的通过下面的内容可以快速上手这个grpc框架安装命令行工具php需要这个额外的protoc、grpc_php_plugin工具把这个protobuf格式的文件生成php语言里的类go需要安装protoc-gen-go工具把protobuf格式的接口…

SOCKET通信的基本步骤

SOCKET通信的基本步骤 1)建立一个服务器ServerSocket,并同时定义好ServerSocket的监听端口;2)ServerSocket 调用accept()方法,使之处于阻塞。3)创建一个客户机Socket,并设置好服务器的IP和端口。4&#xff…

Linux epoll 笔记(高并发事件处理机制)

wiki: Epoll优点; Epoll工作流程; Epoll实现机制: epollevent; Epoll源码分析; Epoll接口: epoll_create; epoll_ctl; epoll_close; Epoll工作方式: LT(level-triggered); ET(edge-triggered); Epoll应用模式; Epoll优点&#xff…

Django请求响应对象

请求与响应对象 HttpRequest HttpRequest存储了客户请求的相关参数和一些查询方法。 path请求页面的全路径,不包括域名—例如, "/hello/"。 methodHttp请求方法,包括GET,POST。 GETQueryDict类实例,包含所有HTTP GET参数的字典对象。 POSTQuer…

matlab 作图 虚线太长,matlab 极坐标绘图 在matlab中,用polar画的图形,如何使虚线圆多显示几个?...

满意答案iredwood推荐于 2018.12.26采纳率:52% 等级:12已帮助:13535人打开polar.m 文件,路径可通过输入 which polar 命令得到。其中修改下面这段代码,可以控制虚线圆的显示个数。其中rticks 为控制显示个数的参量。…

《学习opencv》笔记——矩阵和图像处理——cvAnd、cvAndS、cvAvg and cvAvgSdv

矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取“位与运算”const CvArr* src1,//第一个矩阵const CvArr* src2,//第二个矩阵CvArr* dst,//结果矩阵const CvArr* mask NULL;//矩阵经行像素点与的“开关” );程序实例#include <cv.h> #inc…

Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: 1 Session sessionHibernateUtil.getSession(); 2 Book book (Book) session.get(Book.class,2); 3 System.out.println(book.getName());…

指纹图像方向图matlab,matlab指纹方向场方向图程序

function Fangxiangtu zhiwen_fangxiangtu( Zhiwentuxiang )%函数功能计算指纹方向图%函数参数指纹图像Zhiwentuxiang%函数返回值指纹方向图FangxiangtuSizeZhiwentuxiang size( Zhiwentuxiang ) ;Zhiwentuxiang double( Zhiwentuxiang ) ;W 4; % 窗口大小(2W1)*(2W1)W 4;…

怎样实现一个简单的jQuery编程

第一步&#xff1a;在head中载入jQuery框架 <script  type"text/javascript" src"jQuery文档所在的绝对路径"></script> 注&#xff1a; type——指定脚本的mime类型 src——规定外部脚本文件的URL jQuery是一个javascript库&#xff0c;相…

php多人点餐可以看到对方点的菜,千万不要小看你身边那个会点菜的人,因为

饭局上&#xff0c;你常常是负责点菜的那个人&#xff0c;还是只负责吃&#xff1f;拿起菜单点菜&#xff0c;你是很从容&#xff0c;还是不知道怎么点&#xff1f;事实上&#xff0c;饭局上那个会点菜的人&#xff0c;千万不能小看。某次随老板外出开会&#xff0c;跟去的几个…

gvim for php,转 : Gvim建立IDE编程环境 (Windows篇)

说明&#xff1a;本文是作者在完全按照著名的《手把手教你把Vim改装成一个IDE编程环境》一文&#xff0c;在Windows XP上用gvim建立IDE环境时所作的备忘。原作地址&#xff1a;http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx。1.安装gvim7.2。运行gvim72.exe&…

1081. Rational Sum (20) -最大公约数

题目如下&#xff1a; Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case starts with a positive integer N (<100), followe…

CRC8校验分析

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** CRC即循环冗余校验码&#xff08;Cyclic Redundancy Check&#xff09;&#xff1a;是…

insert mysql后加where,如何在MySQL Insert語句中添加where子句?

This doesnt work:這不起作用:INSERT INTO users (username, password) VALUES ("Jack","123") WHERE id1;Any ideas how to narrow insertion to a particular row by id?任何想法如何通過id縮小插入到特定行?8 个解决方案#120In an insert statement y…

阿里云使用笔记-Lrzsz上传下载文件-centos7

2019独角兽企业重金招聘Python工程师标准>>> 上传文件时提示&#xff1a; -bash: rz: command not found rz命令没找到&#xff1f; 执行sz&#xff0c;同样也没找到。 原来是要安装个叫 lrzsz 的东西&#xff0c;一查可以直接yum。 安装lrzsz&#xff1a;# yum -y …