検索
VS2010 调试技巧Jun 07, 2016 pm 03:48 PM
httpvs2010スキルデバッグ

http://blog.csdn.net/xiaoxian8023/article/details/7217549 最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也

http://blog.csdn.net/xiaoxian8023/article/details/7217549


最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也很低,所以在网上找了一些技巧,整理了一下,分享给大家。它们都很简单,却能帮我们节约大量的时间,希望对大家有帮助。

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

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

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

  条件中断

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

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

  如何设置条件断点

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

VS2010 调试技巧

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

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

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

  记录到达断点次数

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

VS2010 调试技巧

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

  机器/线程/进程过滤

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

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

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

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

VS2010 调试技巧

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

  设置跟踪点

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

VS2010 调试技巧

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

VS2010 调试技巧

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

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

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

VS2010 调试技巧

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

  跟踪点—运行自定义的宏

  上周,我在伦敦演讲时,有听众问道:当命中跟踪点时,能否自动输出所有的局部变量?

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

<p><span>Sub DumpLocals()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow </span><span>=</span><span> DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object

Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame </span><span>=</span><span> DTE.Debugger.CurrentStackFrame

outputWindow.ActivePane.OutputString(“</span><span>*</span><span>Dumping Local Variables</span><span>*</span><span>” </span><span>+</span><span> vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString(exp.Name </span><span>+</span><span> ” </span><span>=</span><span> ” </span><span>+</span><span> exp.Value.ToString() </span><span>+</span><span> vbCrLf)
Next
End Sub</span></p>

  上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

  使用自定义的“DumpLocals”宏

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

VS2010 调试技巧

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

VS2010 调试技巧

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

VS2010 调试技巧

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

  运行程序

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

VS2010 调试技巧

或者在代码中写有Debug.Print() 语句来输出想查看的数据,在vs调试状态下我们可以再vs的OutPut窗口看见,同上图。

  利用数据提示功能(DataTips)

当程序执行到某一个位置,把鼠标放到变量上,会自动显示值。

VS2010 调试技巧

  利用可视化调试窗体(DebuggerVisualizers)

举一个DataTable的DebuggerVisualizers的例子:

VS2010 调试技巧

直接点击放大镜的图标,或者下拉列表中选择DataTable Visualizer,即可打开可视化的界面:如下图

VS2010 调试技巧

当然如果是DateSet,可视化工具窗口的表可以选择DataSet所包含的所有表的信息。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何使用php扩展XDebug进行强大的调试和性能分析如何使用php扩展XDebug进行强大的调试和性能分析Jul 28, 2023 pm 07:45 PM

如何使用PHP扩展Xdebug进行强大的调试和性能分析引言:在开发PHP应用程序的过程中,调试和性能分析是必不可少的环节。而Xdebug是PHP开发者常用的一款强大的调试工具,它提供了一系列高级功能,如断点调试、变量跟踪、性能分析等。本文将介绍如何使用Xdebug进行强大的调试和性能分析,以及一些实用的技巧和注意事项。一、安装Xdebug在开始使用Xdebu

使用GDB调试Linux内核的常用配置技巧使用GDB调试Linux内核的常用配置技巧Jul 05, 2023 pm 01:54 PM

使用GDB调试Linux内核的常用配置技巧引言:在Linux开发中,使用GDB调试内核是一项非常重要的技能。GDB是一款功能强大的调试工具,可以帮助开发者快速定位和解决内核中的bug。本文将介绍一些常用的GDB配置技巧,以及如何使用GDB调试Linux内核。一、配置GDB环境首先,我们需要在Linux系统上配置GDB的环境。请确保你的系统已经安装了GDB工具

Laravel开发:如何使用Laravel Tinker进行交互式调试?Laravel开发:如何使用Laravel Tinker进行交互式调试?Jun 13, 2023 pm 04:33 PM

Laravel是一个流行的PHP框架,它提供了一种叫做Tinker的交互式命令行工具。Tinker是通过命令行与应用交互的一种简单而强大的方式,使用它可以轻松地测试和调试Laravel应用程序。本文将介绍如何在Laravel中使用Tinker进行交互式调试,包括如何安装和使用它。安装TinkerTinker是Laravel的默认包,因此它已经包含在了Lara

Python 2.x 中如何使用pdb模块进行代码调试Python 2.x 中如何使用pdb模块进行代码调试Aug 01, 2023 pm 12:05 PM

Python2.x中如何使用pdb模块进行代码调试引言:在软件开发过程中,我们往往会遇到程序错误、变量值不符合预期或意外结果等问题。为了解决这些问题,我们需要对代码进行调试。Python中提供了强大的pdb(Pythondebugger)模块,可以帮助我们快速定位问题并进行调试。本文将介绍如何在Python2.x中使用pdb模块进行代码调试,并且附上

vs2010最新密钥是什么vs2010最新密钥是什么Jul 10, 2023 am 11:09 AM

vs2010最新密钥是:1、YCFHQ-9DWCY-DKV88-T2TMH-G7BHP;2、YDK44-2WW9W-QV7PM-8P8G8-FTYDF;3、PQT8W-68YB2-MPY6C-9JV9X-42WJV;4、6VPJ7-H3CXH-HBTPT-X4T74-3YVY7等。

Linux下使用GDB调试多线程程序的常见配置方法Linux下使用GDB调试多线程程序的常见配置方法Jul 04, 2023 pm 02:49 PM

Linux下使用GDB调试多线程程序的常见配置方法引言:在多线程编程中,调试是一项必不可少的工作。GDB是一个功能强大的调试器,可以帮助我们定位和解决多线程程序中出现的错误。本文将介绍在Linux下使用GDB调试多线程程序的常见配置方法,并配备代码示例,希望能帮助读者更好地理解和运用GDB。一、安装GDB首先,我们需要在Linux系统中安装GDB。在终端中输

调试和解决Linux网络连接问题调试和解决Linux网络连接问题Jun 30, 2023 pm 06:06 PM

如何调试和解决Linux系统中的网络连接问题在使用Linux系统过程中,我们经常会遇到网络连接问题,如无法访问互联网、无法连接到局域网、网速缓慢等。这对于依赖网络工作和学习的用户来说无疑是一个令人头疼的问题。本文将介绍一些常见的网络连接问题,并提供一些调试和解决的方法,帮助读者快速找到和解决问题。首先,我们需要先确定网络连接是否正常。可以使用命令ping来测

如何使用CakePHP中的调试输出?如何使用CakePHP中的调试输出?Jun 05, 2023 pm 12:10 PM

作为一个强大的PHP框架,CakePHP提供了许多工具来帮助开发者进行调试。其中,调试输出是一种非常重要的工具,可以帮助开发者快速定位代码中的问题。本文将介绍如何使用CakePHP中的调试输出。一、什么是调试输出调试输出是指在运行程序时输出调试信息。它可以帮助开发者在程序运行时对变量、对象、数组等进行检查,以便发现程序中存在的错误。在CakePHP中,使用调

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター