代码改变世界

Vs2010 技巧

2013-01-09 22:50  yezhi  阅读(348)  评论(0)    收藏  举报

http://www.cnblogs.com/sunjunlin/archive/2011/03/24/1994357.html

快速关闭Tab文档

     方法一、Window->Close All Document

    方法二、 Ctrl+F4

    方法三、右键 –>Close All Document

    方法四、鼠标中轮

快速输入foreach,for,while等语句

    正常输入关键词例如,输入for,当看到匹配字出现后按两次Tab完成语句输入。

image

完成后的状态

image

===========实用调试技巧

原文发表地址:Debugging Tips with Visual Studio 2010
原文发表时间:Wednesday, August 18, 2010 9:48 PM

这是我的博客中关于VS 2010和.NET 4发布系列的第二十六篇文章。

今天的博文将介绍Visual Studio中的一些实用调试技巧。这是受我朋友Scott Cate (他发表过几十篇很棒的VS技术文章) 启发。他最近告诉我,许多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)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

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

以上程序中,我们使用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的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

总结

Visual Studio的调试程序功能极其丰富,我强烈建议大家花些时间去掌握它的所有功能。上述技巧是大家平时很少注意的那些功能中的一小部分。

我之前写过关于VS 2010 调试器改进的博文(包括固定数据提示窗、导入/导出断点、保留上次变量的值,等等)。以后我还会发表更多关于VS 2010的新智能提示和文件调试信息的转储支持的博文。这些技术赋予开发人员强大的调试能力,使调试程序(包括发行后的产品)变得更容易,更强大。

如果想学习更多Visual Studio知识,请参考Scott Cate的Visual Studio 2010知识与技巧系列。他发表了一系列精彩的免费视频和文章。

也可以参考 Jim Griesmer的Visual Studio调试技巧系列。他有着丰富的知识可供大家学习。

希望对大家有帮助。

Scott

补充:在本文之外,我还使用Twitter做快速更新和共享,地址是twitter.com/scottgu

 

 

1.有没有遇到需要switch一个枚举的每一个枚举类值时不断的打case,break,那你一定会觉得那是传很痛苦的事,换一种方式吧,在代码行中直接打入switch这时按TAB键既可自动完成switch块。光标自动定位到待选择的变量上,打入枚举变量后直接按下键头既可生成该枚举全部的case块代码。

2.平时打开ASPX页面时往往要等半天,可以在【工具】->【HTML设计器】中去掉“启用HTML设计器”,重启VS后再找开ASPX文件试试,是不是快了很多。同时还可以养成手写HTML的好习惯。

3.写代码时经常要注释一些代码,测试,然后再取消注释,反复如此,可以记住这两个快捷键,按Ctrl+K,Ctrl+C注释代码,按Ctrl+K,Ctrl+U取消注释。可以在开发中不用将手在键盘和鼠标间移来移去,是一件多么惬意的事啊。这时候还可以配合Shift+上下键头,可以选择多行。就此告别用鼠标选中一段然后点工具栏上注释的历史吧。

4.当看到一个变量时要怎么知道整页中有哪些位置引用了这个变量呢?以前的办法是一个个的找,但在VS2010将光标定位到一个变量上时整个页面中的全部引用该变量的位置都会变灰,这是一个非常方便的功能,同时你还可以按住Shift+Ctrl+上下键头在这些引用的位置切换,如果还在使用眼睛在密密麻麻的代码中寻找变量的话,那就赶快试一下这个快捷键吧。如果要在更大范围内查找这个引用的话,就要使用更牛的快捷键Shift+F12,它可以在整个工程中查找引用。

5. 用了一段时间VS之后就会发现有些菜单和工具条上的按钮从不会用,但有些常用的却要每次去找,这时可以使用VS的菜单和工具条的定制,右键菜单会弹出自定义,在里面可以调整菜单的位置,把这辈子都不会用到的菜单从我们眼前清理掉吧,将我们最常用的菜单调到前面,或干脆建个菜单放到一起,自己动手把VS定制成自己顺手的工具吧。

6.如果你用了很久VS2010但却没有用过扩展工具,那可就太浪费它强大的功能了,VS2010被设计成了可扩展的IDE,它有着各种各样的扩展工具,【工具】->【扩展管理器】中可以管理和安装各种扩展工具,每位必备的肯定是Productivity Power Tools了,现在这个插件功能已经非常强大了。先装上他试试吧。

 

1.行编辑(复制,剪切,删除,交换)

当你在光标停留行使用快捷键Ctrl+C,X,L时,可以复制,剪切,删除整行内容。当然,右键也是可以的。跟平时的复制,剪切,删除就是选中和没选中代码的区别而已。

如果你想交换上下两行,你可以使用快捷键(Shift+Alt+T),前提是光标要停留在上面那一行。替换之后,光标会一直跟随原本的那一行。

2.注释(//TODO:...)

看标题的话,你可能想打我。那个程序员不知道注释啊,不就//或者/*.....*/亦或者(HTML/XML注释)。但是使用过

// TODO:注释部分

的,估计是少数吧。如果你喜欢用“任务列表”记录一些要做的事情,这个小功能最适合你了。你可以再VS 2010的菜单上找到任务列表窗,点击“菜单->视图->任务列表”,你也可以点击快捷键“Ctrl+W,T”。VS还提供了,HACK,UNTODU,UnresolvedMergeConflict标记注释,你可以在“工具->选项->环境->任务列表”找到并且编辑/添加/删除标记注释。下面是图示:

 

标记注释和任务列表

 

 

标记注释设置

 

3.创建区域(#region和#endregion)

当代码越来越多的时候,你会期望可以隐藏一些代码,而#region和#endregion 就是这样的功能。你可以在任何位置隐藏任何代码。即使是隐藏的内容不属于同一个函数。你可以点击#region旁边的+/-,展开/隐藏代码。在隐藏的时候,当你的光标放放置在备注上面的时候,VS会显示出隐藏的代码内容。(听说VB.net使用的时候只可以写在方法外面,不能写在里面。因为本人没写过VB,所以可能在这方面会误导到大家,谢谢网友@天生俪姿 的提醒)

 

隐藏代码

 

4.选择一个单词/选择一个字符串

如你所知双击一个单词的时候会选择整个单词。按住Ctrl键单击单词的任意位置同样可以选中单词。

双击字符串第一个引号的左侧可以选中整个字符串。按住Ctrl键单击第一个引号的前面同样可以选中整个字符串。

5.将代码放入工具箱

工具箱是拿来放控件的地方。我们在使用控件的时候,只需要从控件当中拖动控件到代码就可以了,这样可以省去大量代码的编辑工作。既然工具箱如此方便,那么是否可以将一段重用性很高的代码放入工具箱呢。答案当然是可以的。

你可以选中你的代码,然后拖入工具箱的空白处,你的代码就保存到工具箱了。就像你将控件拖入代码页面一样,也可以将代码拖入工具箱中。以后你就可以像使用控件一样使用重用的代码。这是非常方便的。而且工具箱的内容不会因为你关闭VS而消失,在你下次打开VS的时候工具箱同样保存了你的代码。如果你需要查看工具箱保存的代码而又不想拖到代码页面中,你只需要将光标停留在工具箱的代码图标上面。如图所示:

 

将代码放入工具箱

 

6.格式化代码

这个很重要,即使VS在你每次打完“;”回车之后会自动格式化代码。但是难免代码的格式会有所变化,譬如粘贴一段代码之后,代码的格式往往会受到影响。所以,这个还是很有必要知道的。

格式化部分代码:选中代码->Ctrl+K,F。或者Ctrl+E,F。

格式化整个文档:编辑->高级->设置文档的格式。或者 Ctrl+K,D。或者Ctrl+E,D。

7.切换设计/代码图示

在ASP.NET页面切换(HTML): Ctrl+PgUp/Ctrl+PgDn

在windows窗体切换:F7/Shift+F7 (代码/设计)

8.查找错误代码。

当错误列表有错误或者警告提示时,你可以双击这个错误或提示,就可以跳转到错误或警告的语句前。

9.跳转到指定行号

如果代码很多的时候,这是很有用的。在ASP.NET编程的时候,很多错误只有在运行网站的时候才能发现,而这个错误又没被在错误列表提示的时候,你就可以使用这个小技巧跳到错误的代码前面。

双击右下角状态栏的行号,会跳出一个行号跳转窗体。或者快捷键Ctrl+G调出窗体。当然,还可以从菜单栏点击“编辑->跳转..”使用这个功能。

 

跳转到指定行号

 

10.快速查找

光标停留在需要查找的词上面,使用快捷键Ctrl+F3可以跳转到下一个相同的词。按Shift+F3可以往上查找。

11.查找“{/}”

查找:你是否很烦恼有些对应的标记找的到头找不到尾,找得到尾不知道那个是头。当你把光标放在“{”的前面,VS会将相对应的”}“标记起来。你也可以将光标停留在“}”的后面,可以达到同样的效果。

 

查找“{/}”

 

12.查找和替换

当你想查找/替换掉某个字符串的时候,你可以按快捷键“Ctrl+F”或者“Ctrl+H”,进行这一操作。另外VS支持正则表达式和通配符。

如果你想从整个项目进行查找/替换,你需要使用快捷键“Ctrl+Shift+F”或者“Ctrl+Shift+H”。当然这一切都可以在菜单栏找到。“编辑->查找和替换”。当你想中止全局替换的时候,你可以使用快捷键“Ctrl+Pause Break”。

 

查找和替换

 

13. 书签

书签是很有用的功能,用过Chrome的都知道。在VS当中,书签同样适用。它可以帮你保存位置,以便你写代码。

放置书签:Ctrl+B,T。

上一个书签:Ctrl+B,P。

下一个书签:Ctrl+B,N。

删除所有书签:Ctrl+K,C。(居然打错了,对不起,谢谢@河蟹社会 提醒),正确的是Ctrl+B,C。

除此之外,VS还提供了其它的书签操作。

 

书签

 

14.跳转到定义

当你查看代码的时候,往往需要去查看原函数,这是难免的。但是千万不要去手动寻找函数。这效率往往是很低的。你可以右键该函数,选择跳转到定义即可。当然你也可以使用快捷键F12。

 

跳转到定义

 

15.以文本形式插入外部文本

“菜单->编辑->将文件作为文本插入”

好处是,你不需要打开文件去复制粘贴。

 

将文件以文本的形式插入

 

或许这些小技巧你早就知道了。亦或是,你觉得这些技巧根本没啥用。当然,我们最主要的任务还是去编码而已。没有必要将心思花在这上面。但是,当你习惯使用这些小技巧的时候,这为你带来的收益觉得不会让你有所失望的。有些技巧,个人认为还是很有必要掌握的。

总之,捡你想捡的吧,让其他人折腾去吧。

原文:http://www.cnblogs.com/rond/archive/2012/03/05/2380367.html