VS2010中的调试技巧
- 格式:doc
- 大小:361.00 KB
- 文档页数:9
IntelliTrace使用IntelliTrace 调试应用程序Justin Marks下载代码示例用户如何修复他们的代码中的Bug?您设置一些断点、在调试器下运行程序、进行一点单步调试–并祈求能够轻而易举地发现问题,这样您就能继续处理其他事情。
几乎自ENIAC 发明以来,我们就一直在进行着同样方式的调试。
这种繁琐而耗时的调试方法为我们提供了很好的帮助,但是时候使调试更加轻松了。
随着Visual Studio 2010 Ultimate 的发布,新的IntelliTrace 功能使开发人员能够更深入地了解应用程序的执行情况,从而使调试进入了21 世纪。
与其他监视和跟踪工具(例如Windows Sysinternals 中的Process Monitor)非常类似,Visual Studio 2010 在应用程序执行时收集有关应用程序的数据,来帮助开发人员诊断错误。
收集的数据称为IntelliTrace 事件。
这些事件将在默认调试过程中收集,此外,它们使开发人员能够进行回溯以查看应用程序中发生的情形,而不必重新启动调试器。
在本文中,我将向您介绍IntelliTrace,并演示它如何在开发人员的日常开发活动中体现出价值。
我将演示IntelliTrace 如何提供在应用程序执行过程中所发生事件的时间线,以及开发人员如何能够使用这些事件来帮助调试。
接着,我将论述一些设置,开发人员可以更改这些设置来收集有关应用程序的一组更深层的信息,从而获得完整的执行历史记录。
最后,我将演示如何使用其他人(测试人员)创建的以前记录的IntelliTrace 文件来调试应用程序,而不必运行应用程序来重现错误。
当Visual Studio 诊断团队开始规划Visual Studio 2010 时,我们花费了很多时间与客户讨论,了解客户如何诊断其应用程序中的问题。
尽管每个人都有不同的方式和喜欢使用的工具集,但有一点是绝对清楚的:传统的应用程序问题诊断方法困难、耗时而且成本高昂。
一、建立空项目
`
二、导入源代码文件
把GAMP源码加载到项目中:右键项目->添加“现有项”
其中,main.c是主函数。
三、项目属性
选择:项目 -> 属性。
设置一:配置属性 -> C/C++ -> 预处理器 -> 预处理定义:
WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;ENAGL O;ENACMP;ENAGAL;NFREQ=3
设置二:配置属性 -> 链接器 -> 调试 -> 生成调试信息:是
设置三:配置属性-> C/C++ ->常规->调试信息格式:C7
四、设置pthread
解压附件找到Pre-built.2文件夹
分别设置头文件路径、库文件路径、库文件名。
右键项目->属性-> C/C++ ->常规->附加包含目录
右键项目->属性->链接器->常规->附加库目录(选pthreadVSE2.lib在的目录)
右键项目->属性->链接器->输入->附加依赖项(我的是VS2010,选的是pthreadVSE2.lib,假如加了多个lib文件的话,就在文件中间加分号)
五、加载linux兼容头文件
将unistd.h和dirent.h放到类似这样的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include安装目录下。
Visual Studio 调试小技巧(1)-根据字符串内容添加断点在用Visual Studio调试程序时,我们经常需要根据数值添加断点。
比如需要当i == 2时中断运行,我们可以添加如下的断点:有些时候,我们需要根据字符串的内容来添加断点。
比如我们在调试如下代码:void CVSDebugTricksDlg::OnBnClickedButton1(){char* string;for(int i = 0; i < 5; ++i) {string = GetString(i);TRACE(string);}}char* CVSDebugTricksDlg::GetString(int number){switch (number) {case 0:return"Zero";case 1:return"One";case 2:return"Two";default:return"Other";}}我们希望当运行到Trace(string)时,如果字符串string为”Two”时能中断运行。
如果我们和根据数值添加断点一样的方法,添加如下断点:当我们运行上述代码时,会发现即使string的内容”Two”时,运行并没有中断。
这是因为==运算符比较的是两个字符串的地址而不是内容,因此上述断点并不能满足我们的需求。
Visual Studio考虑到程序员经常会根据字符串的内容添加断点,因此在添加断点这个功能上为字符串做了特殊的支持。
我们在根据字符串内容添加断点时,可以使用strcmp等函数来设置断点。
于是在上述示例中,我们可以用strcmp函数来添加如下断点:Visual Studio中的添加断点功能中支持的字符串函数有:strlen, wcslen, strnlen, wcsnlen, strcmp, wcscmp, _stricmp, _wcsic mp, strncmp, wcsncmp, _strnicmp, _wcsnicmp, strchr, wcschr, strstr , wcsstr.在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量。
《Visual C++ 2010入门教程》系列六:VC2010常见调试技术犹豫了好久,最终还是决定开始这一章,因为我不清楚到底有没有必要写这样的一章,是应该在这里说明一些简单的调试方法,还是干脆直接让大家去看《Visual C++ 2005入门经典》的第10章,因为那里已经说出了我们几乎所有的常见调试方法。
另外一点就是这一章也许会是《Visual C++ 2010入门教程》系列的最后一章了,因为在入门的这方面,我已经找不到值得和大家分享的经验了,算是黔驴技穷了吧。
回头看看这个系列,最初的目的就是为了解决一些初学者常见的问题,教会初学者如何使用VS2010这个工具,因为我也经历过那些阶段,我希望我能帮助那些“曾经的我”少走弯路。
过去,我们讨论了一些诸如C++和VC有什么区别、怎么用C++做项目这样的问题,介绍了SVN的使用,常见功能的快捷方式,VC配置等等。
接下来就是最后的一些与调试相关的东西与大家分享。
另外强烈推荐对基本VC调试技术不熟悉的朋友去看看《Visual C++ 2005入门经典》的第十章。
断点没有比断点更常用的了,通过点击代码左边边栏或者移动光标到指定行按F9等都可以添加断点。
值得注意的是并非每一行都可以添加断点,这个就留给大家去实践中体会吧。
通过菜单》调试》窗口》断点或者直接按Alt+F9可以调出断点选项卡,通过选项卡我们可以设置条件断点、数据断点等。
单步和监控调试中除了F5之外,另外更常用的估计是F10、F11了,前者是一次一个语句的执行,或者可以看出一行;而后者如果出现能进入的子过程,那么就会进入子过程。
这个请大家找个程序,至少要有函数调用的,当断点触发的时候,请自行体验一下F10和F11的效果你就明白了。
说白了,实践才是最好的老师,我负责告诉你有这么个东西。
两个选项卡,局部变量和自动变量,它们都负责显示一些当前断住状态下的变量的值,注意,这些只有在程序中断的时候才有意义。
自动变量选项卡并非指auto变量,而是指VS帮我们猜想我们可能感兴趣的一些变量的值,或者函数返回值,而局部变量基本上就是本过程的一些变量的值了。
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了。
即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。
目录Visual Studio 2010调试技巧 (1)1.跳到当前光标处(Ctrl+F10) (1)2.条件中断 (1)3.如何设置条件断点 (1)4.记录到达断点次数 (2)5.机器/线程/进程过滤 (3)6.跟踪点—进入断点时的自定义操作 (4)7.设置跟踪点 (5)8. 跟踪点—运行自定义的宏 (6)9. 使用自定义的“DumpLocals”宏 (7)10.运行程序 (9)11. 悬停鼠标查看表达式值 (9)12 在运行过程中改变变量值 (10)13 设置下一个运行位置 (10)14 编辑然后继续运行 (11)15 一个方便的查看窗口 (12)16 注释反汇编 (12)17 堆栈信息的线程窗口 (13)18 条件断点 (14)19 内存窗口 (14)20. 跳转到定义 (15)21 命令窗口 (16)22.InteliTrace记录每一步的调试状态。
(19)23.条件中断 (20)24.记录到达断点次数 (22)25. 断点筛选器 (23)26. 跟踪点—进入断点时的自定义操作 (24)Visual Studio 2010调试技巧甚至一些很有经验的开发人员,都不知道这些技巧。
希望这篇文章能帮你掌握这些技巧。
它们都很简单,却能帮你节约大量的时间。
1.跳到当前光标处(Ctrl+F10)我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。
当程序员的确需要仔细观察每一步的状态变化时,F10/F11是合理的选择。
然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。
这时,你应该利用―跳到当前光标处‖这个功能。
先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。
你再也不用按许多次F10/F11了。
即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。
vs2010使用技巧Visual Studio 2010(简称VS2010)是一款由微软开发的集成开发环境(IDE),主要用于开发各种应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。
这里将介绍一些VS2010的使用技巧,帮助用户更高效地开发应用程序。
1. 快速导航:VS2010提供了快速导航的功能,可以帮助我们在大型项目中快速定位到特定的代码行。
使用快速导航,可以通过按下Ctrl + , (逗号键)来打开导航窗口。
在导航窗口中,可以输入要查找的方法名、变量名或文件名,并通过键盘上的上下箭头键来选择并跳转到相应的代码位置。
2. 代码片段:代码片段是一种重用代码的方式,可以帮助我们快速插入常用代码块。
在VS2010中,通过按下Ctrl + K,X来打开代码片段窗口。
在代码片段窗口中,可以选择已有的代码片段,也可以自定义新的代码片段。
代码片段可以包含多个占位符,方便用户根据需要进行替换。
3. 代码重构:VS2010提供了一些代码重构的功能,可以帮助我们改善代码的结构和质量。
例如,可以通过右键点击某段代码,选择“重构”菜单来进行重命名、提取方法、封装字段等操作,以提高代码的可读性和可维护性。
4. 调试工具:VS2010提供了强大的调试工具,可以帮助我们快速定位和修复代码中的错误。
例如,可以使用断点来暂停程序的执行,查看变量的值和调用栈等信息。
还可以使用条件断点、数据断点等高级调试技巧来帮助我们更精确地定位问题。
5. 多项目管理:VS2010允许用户同时打开和管理多个项目,方便我们进行跨项目的开发和调试。
通过选择“文件”菜单中的“添加”选项,可以将其他项目引入到当前解决方案中。
同时,VS2010还提供了一些工程管理的功能,如项目依赖、项目引用等,方便我们更好地管理项目之间的关系。
6. 快捷键使用:VS2010提供了众多快捷键,可以帮助我们加快编码速度。
例如,可以使用Ctrl + K,D来格式化代码,使用Ctrl + K,C来注释选中的代码,使用F12来查找代码的定义等。
一、建立空项目
`
二、导入源代码文件
把GAMP源码加载到项目中:右键项目->添加“现有项”
其中,main.c是主函数。
三、项目属性
选择:项目 -> 属性。
设置一:配置属性 -> C/C++ -> 预处理器 -> 预处理定义:
WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;ENAGL O;ENACMP;ENAGAL;NFREQ=3
设置二:配置属性 -> 链接器 -> 调试 -> 生成调试信息:是
设置三:配置属性-> C/C++ ->常规->调试信息格式:C7
四、设置pthread
解压附件找到Pre-built.2文件夹
分别设置头文件路径、库文件路径、库文件名。
右键项目->属性-> C/C++ ->常规->附加包含目录
右键项目->属性->链接器->常规->附加库目录(选pthreadVSE2.lib在的目录)
右键项目->属性->链接器->输入->附加依赖项(我的是VS2010,选的是pthreadVSE2.lib,假如加了多个lib文件的话,就在文件中间加分号)
五、加载linux兼容头文件
将unistd.h和dirent.h放到类似这样的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include安装目录下。
Visual-Studio-2010的调试技巧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了。
VS2010中的调试技巧
用F9 添加需要监视的行的断点,然后F10进入逐步调试状态,遇到方法需要进入方法的,按下F11进行
我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按
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).O bject
Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame = DTE.Debugger.CurrentStackFrame
outputWindow.ActivePane.OutputString(“*Dumping Local Variables*” + vbCr Lf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString( + ” = ” + exp.Value.ToStr ing() + vbCrLf)
Next
End Sub
上述宏代码将循环当前的堆栈,把所有的局部变量输出到―输出‖窗口。
使用自定义的“DumpLocals”宏
然后,我们可以在如下的一个简单程序中使用刚定制的―DumpLocals‖宏了:
上述代码中,我们用F9在―Add‖方法的返回值处加了个断点,然后右击断点,在弹出菜单上选择―When hit‖。
将显示如下对话框。
和之前不一样,我们不选―Print a message‖选项,也不手工设定需要输出的变量;而是选择―Run a marco‖复选框,并指定到我们上面创建的
UsefulThings.DumpLocals宏上:
为了使程序能在命中跟踪点后仍继续运行,我们将继续选中―continue execution‖复选框。
运行程序
现在按F5运行程序,当―Add‖方法被调用时,我们会在Visual Studio的―输出‖窗口中看到如下结果。
注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:。