Visual-Studio-2010的调试技巧.doc_第1页
Visual-Studio-2010的调试技巧.doc_第2页
Visual-Studio-2010的调试技巧.doc_第3页
Visual-Studio-2010的调试技巧.doc_第4页
Visual-Studio-2010的调试技巧.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual Studio 2010的调试(断点设置、变量查看)(1)、在需要暂停的位置设置断点(方法一:将鼠标置于将要设置断点的行,按F9或在调试中选择设置断点;方法二:单击将要设置断点的代码行的左侧边区域),如下图所示:(2)、点击“开始调试”或F5,进行调试;(3)、当程序执行到断点处,执行暂停(处于中断模式),如下图所示:(4)、此时可检查变量的值方法一:将鼠标指针悬停在该变量上方,该变量的值将显示,如下图红色背景的单词,其实此时鼠标位于字母r和t中间,在它的右下侧显示了的它值。(此方法只要把鼠标放到变量的上面就可以)方法二:将鼠标放在某变量上,单击鼠标右键,并“添加监视”(Add Watch),该变量的名字和值将会在生成的“监视窗”显示(5)、此时可选择“逐行”调试或F11、“逐过程”调试或F10,如连续按F10,可查看表中的值的变化,(6)、直到程序尾,结束调试。注:在(4)中,查看变量的值,我们也可以用SHIFT+F9,打开快速监视窗,然后在其输入变量名,查看变量的值,或打开快速监视窗后,再填加“监视窗”。VS2010中的调试技巧许多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.OutputWindowoutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).ObjectDim currentStackFrame As EnvDTE.StackFramecurrentStackFrame = DTE.Debugger.CurrentStackFrameoutputWindow.ActivePane.OutputString(“*Dumping Local Variables*” + vbCrLf)For Each exp As EnvDTE.Expression In currentStackFrame.LocalsoutputWindow.ActivePane.OutputString(exp.Name + ” = ” + exp.Value.ToString() + vbCrLf)NextEnd 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的新智能提示和文件调试信息的转储支持的博文。这些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论