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了。
命令名快捷键说明调试.应用代码更改Alt + F10启动生成操作,利用它可以通过“编辑续”功能应用对正在调试的代码所作的调试.自动窗口Ctrl + D,Ctrl + A 显示“自动”窗口,以查看在当前过程前所执行中的变量的值。
调试.全部中断Ctrl + Alt + Break 临时停止执行调试会话中的所有进程。
于“运行”模式。
调试.在函数处中断Ctrl + D,Ctrl + N显示“新断点”对话框。
调试.断点Ctrl + D,Ctrl + B 显示“断点”对话框,可以在其中添加断点。
调试.调用堆栈Ctrl + D,Ctrl + C 显示“调用堆栈”窗口,以显示当前执的所有活动过程或堆栈帧的列表。
仅可于“运行”模式。
调试.删除所有断点Ctrl + Shift + F9清除项目中的所有断点。
调试.反汇编Ctrl + Alt + D显示“反汇编”窗口。
调试.启用断点Ctrl + F9将断点从禁用切换到启用。
调试.异常Ctrl + D,Ctrl + E显示“异常”对话框。
调试.即时Ctrl + D,Ctrl + I 显示“即时”窗口,在此可计算表达式个别命令。
调试.局部变量Ctrl + D,Ctrl + L 显示“局部变量”窗口,以查看当前堆每个过程的变量及变量值。
调试.内存1Ctrl + Alt + M,1显示“内存 1”窗口,以查看大的缓冲符串以及无法在“监视”或“变量”窗楚显示的其他数据。
调试.内存2Ctrl + Alt + M,2显示“内存 2”窗口,以查看大的缓冲符串以及无法在“监视”或“变量”窗楚显示的其他数据。
调试.内存3Ctrl + Alt + M,3显示“内存 3”窗口,以查看大的缓冲符串以及无法在“监视”或“变量”窗楚显示的其他数据。
调试.内存4Ctrl + Alt + M,4显示“内存 4”窗口,以查看大的缓冲符串以及无法在“监视”或“变量”窗楚显示的其他数据。
调试.模块Ctrl + D,Ctrl + M 显示“模块”窗口,利用它可以查看程的 .dll 或 .exe 文件。
所谓的动态调试(跟踪)是指,让程序一步一步的执行,我们可以随时随地的关注程序的运行状态。
中断的意思就是让程序先别急着往下执行,等我查看完了,给你指令再接着运行。
断点么,就是中断的点呗,就是程序运行到此时,先中断下了,停下了让我看看:)1.要想用vs来调试,先要让启用服务器端调试,就是在iis中设置一下就行,iis7中设置如下图示(iis7中不仅网站那要设置,在主页那也要设置才能生效):2.在要调试的地方,插入stop语句:3.在ie中访问页面,此时会弹出对话框,选择vs2005或者vs2010作为调试器都行,并点击“是”之后,会有附加安全警告,不用理会,选择附加到此进程即可,即点击“附加”。
就会出来调试界面:大家注意4个地方:最上面的调试工具栏,那有进行跟踪调试的命令按钮。
最左边的黄色箭头和这一灰色列,黄色箭头告诉我们现在程序运行到那一步了。
右边解决方案资源管理器是iis服务器加载的asp文件。
最下面的一些提示栏还是很有帮助的,比如调用堆栈,局部变量,监视等。
现在结合调试实例,一一为大家进行解释。
首先要了解调试工具栏,为大家介绍常用的几个:点击绿色三角则让程序继续执行,如果后面有断点(后面介绍如何设置断点)或者stop 则又会中断,否则asp中服务器脚步执行完毕,就能在页面中看见结果。
第三个蓝色方块按钮,是指结束调试,即使有断点也不会中断了。
黄色箭头是用来显示当前中断的位置,可能我们查看其他页面的代码,忘记当前程序运行到哪了,点击黄色箭头就能立刻转到程序运行点(黄色箭头所指位置表示该语句还未执行)。
然后接下来的三个按钮是跟踪方式(要理解其含义),第一个(快捷键f11,即从左至右第六个)是指单步运行代码,如果遇到函数调用(自己写的),也单步运行进去。
第二个(快捷键f10)按钮也是单步运行代码,但是遇到函数调用就不会执行进去(也就是说,在赋值语句,或者没有函数调用的语句中,f10和f11的作用一样的)。
VS2010使用VC2010里面不能单独编译一个.cpp或者一个.c文件,这些文件必须依赖于某一个项目,因此我们必须创建一个项目。
有很多种方法都可以创建项目,可以通过菜单:文件,新建,项目;也可以通过工具栏点击新建项目进行创建。
这里我们点击起始页面上面的新建项目:1、vs2010中有哪些文件类型,都有什么作用?.h头文件,声明部分。
头文件的作用就是被其他的.cpp包含进去的。
它们本身并不参与编译,但实际上,它们的内容却在多个.cpp文件中得到了编译。
通过“定义只能有一次”的规则,我们很容易可以得出,头文件中应该只放变量和函数的声明,而不能放它们的定义。
因为一个头文件的内容实际上是会被引入到多个不同的.cpp文件中的,并且它们都会被编译。
放声明当然没事,如果放了定义,那么也就相当于在多个文件中出现了对于一个符号(变量或函数)的定义,纵然这些定义都是相同的,但对于编译器来说,这样做不合法。
cpp源文件,代码实现部分,.ico图标文件,程序运用图标。
rc资源文件,各种资源.dll动态链接库文件,生成的动态链接库,.exe应用程序,生成的可执行程序。
dsp空白工程,dsw解决方案.lib静态库.ini配置文件。
保存程序配置信息,obj源文件编译中间文件,可执行二进制代码。
.dsw---- 这种类型的文件在VC中是级别最高的,称为Workspace文件.dsp---- 在VC中,应用程序是以Project的形式存在的,Project文件的扩展名为.dsp,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理,每个工程都对应一个dsp文件.opt---- 与dsw类型的Workspace文件像配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是Workspace文件中要用大本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享。
当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动的创建一个与之配合的包含本地计算机信息的opt 文件。
vs2010的11个调试技巧和⽅法调试是软件开发周期中很重要的⼀部分。
它具有挑战性,同时也很让⼈疑惑和烦恼。
总的来说,对于稍⼤⼀点的程序,调试是不可避免的。
最近⼏年,调试⼯具的发展让很多调试任务变的越来越简单和省时。
这篇⽂章总结了可能节省你⼤量时间的11个Visual studio的调试技巧和⽅法。
1 悬停⿏标查看表达式值调试是很有挑战性的。
⽐如在函数内逐步运⾏可以看出哪⾥出错,查看堆栈信息可以知道函数被谁调⽤等等……但是⽆论哪种情况下,查看表达式和局部变量的值都是很⿇烦的(把表达式和局部变量放到watch窗⼝⾥)。
⼀种更简单的⽅法,把⿏标停在所需查看的数据上。
如果是类或结构,那么点击展开可以很⽅便快速地查看其字段。
2 在运⾏过程中改变变量值调试器不仅仅是分析程序崩溃和诡异⾏为的⼯具,还可以通过逐步调试检查数据和⾏为是否符合程序预期的⽅法解决许多bug。
有时,你会想是否设置某些条件为真,程序就能正确运⾏了。
其实你只要把⿏标移动到变量上,双击值,然后输⼊你需要的值。
这样就不需要修改代码,重启程序了。
3 设置下⼀个运⾏位置⼀个典型的调试案例是我们经常会⽤逐步调试的⽅法去分析为什么函数出错了。
这时你遇到这个函数调⽤其他函数返回错误,⽽这个错误不是你想要的,你该怎么办?重启调试器?这⾥有个更好的⽅法,直接把黄⾊的运⾏位置箭头拖到你想要的运⾏位置。
其实就是跳过中间运⾏代码,直接到想要的位置。
很简单吧。
4 编辑然后继续运⾏在运⾏⼀个很复杂的程序和插件时,发现⼀个错误,但是不想浪费时间去重编译重启动程序。
很简单,只要在这个位置修改这个bug,然后继续调试。
Visual studio会修改这个程序,使得你可以继续调试⽽不需要重启程序。
值得注意的是“编辑然后继续运⾏”这个功能有⼏个限制。
⼀,它不能在64位代码上使⽤。
如果想使⽤这个功能,到项⽬设置⾥的编译选项,选择”x86”作为⽬标平台。
不要担⼼,这⽬标平台在reslease配置是和”debug是分离的,也就是说依然是”Any CPU”的设置。
VisualStudio2010断点调试技巧大全.net程序开发工具我都用vs(visual studio),开发过程中的跟踪调试最常用的就是断点跟踪调试了,但是现在才发现,用了这么多年vs断点跟踪调试是白用了啊。
它居然还可以有这么多用法。
设置断点:在如下图中的红色圆点处设置断点,红色圆点表示已经在这行设置断点。
快捷键F9。
启动调试:按F5或者点击左边红框中的按钮。
右边框是开始执行(不调试) Ctrl+F5。
调试工具栏:下面是工具栏中对应的名称和快捷键。
在调试过程中F5是执行到下一个断点。
F11是逐语句,在执行到下图中的断点时,按F11会执行到Fibonacci方法里面逐步记录执行过程。
F10是逐过程,与逐语句不同的是,在执行到下图中断点时,再执行会执行断点下面的语句,而不是去执行语句中的方法。
局部变量:在调试过程中可以查看局部变量窗口,如下图里面会有变量的当前状态。
如果找不到的话在数组的状态表示如下图:InteliTrace记录每一步的调试状态。
条件中断开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。
如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。
针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。
只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。
这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。
如何设置条件断点:设置条件断点非常容易。
在特定的行上,按F9设置断点。
然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“条件”。
这时弹出一个对话框供你设置激活该断点所需的条件。
比如:我们希望只有当x==5时,调试才中断。
我们可以写出如下的表达式:现在我再运行这个程序按F5达到条件断点,只有当x等于5时,程序运行才会被中断。
掌握VS2010调试-- 入门指南debuggingvisual studio 2010VS2010调试目录(?)[-]1. 导言2. 如何启动调试3. 断点Breakpoints1. 1 使用断点进行调试1. 11 逐过程Step Over2. 12 逐语句Step Into3. 13 跳出Step Out4. 14 继续Continue5. 15 设置下一语句Set Next Statement6. 16 显示下一语句Show Next Statement Ctrl2. 2 断点标签Labeling in Break Point3. 3 条件断点Conditional Breakpoint4. 4 导入导出断点Import Export Breakpoint5. 5 断点命中计数Breakpoint Hit Count6. 6 Breakpoint When Hit7. 7 断点筛选器Breakpoint Filter4. 数据便签Data Tip1. 1 Pin Inspect Value During Debugging2. 2 Drag-Drop Pin Data Tip3. 3 Adding Comments4. 4 Last Session Debugging Value5. 5 Import Export Data Tips6. 6 Change Value Using Data Tips7. 7 Clear Data Tips5. 监视窗口Watch Windows1. 1 局部变量Locals2. 2 自动窗口Autos3. 3 监视Watch1. 有4个可同时使用的监视窗口图多个监视窗口2. 31 Creating Object ID4. 46. 即时窗口Immediate Window7. 调用堆栈Call Stack8. 调试多线程程序Debugging Multithreaded Program1. 1 Exploring Threads Window2. 2 Flag Just My Code3. 3 Break Point Filter - Multithread Debugging9. 调试并行程序Debugging Parallel Program1. 1 Parallel Task and Parallel Stacks10. Debugging with IntelliTrace1. 1 Overview2. 2 Mapping with IntelliTrace3. 3 Filter IntelliTrace Data11. 调试常用快捷键Useful Shortcut Keys For VS Debugging12. 深入学习Further Study13. 总结Summary1 导言在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。
vs2010 调试快捷键命令名快捷键说明调试.应用代码更改Alt + F10启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改。
调试.自动窗口Ctrl + D,Ctrl + A 显示“自动”窗口,以查看在当前过程中,目前所执行中的变量的值。
调试.全部中断Ctrl + Alt + Break 临时停止执行调试会话中的所有进程。
仅可用于“运行”模式。
调试.在函数处中断Ctrl + D,Ctrl + N显示“新断点”对话框。
调试.断点Ctrl + D,Ctrl + B 显示“断点”对话框,可以在其中添加和修改断点。
调试.调用堆栈Ctrl + D,Ctrl + C 显示“调用堆栈”窗口,以显示当前执行线程的所有活动过程或堆栈帧的列表。
仅可用于“运行”模式。
调试.删除所有断点Ctrl + Shift + F9清除项目中的所有断点。
调试.反汇编Ctrl + Alt + D显示“反汇编”窗口。
调试.启用断点Ctrl + F9将断点从禁用切换到启用。
调试.异常Ctrl + D,Ctrl + E显示“异常”对话框。
调试.即时Ctrl + D,Ctrl + I 显示“即时”窗口,在此可计算表达式和执行个别命令。
调试.局部变量Ctrl + D,Ctrl + L 显示“局部变量”窗口,以查看当前堆栈帧中每个过程的变量及变量值。
调试.内存1Ctrl + Alt + M,1显示“内存1”窗口,以查看大的缓冲区、字符串以及无法在“监视”或“变量”窗口中清楚显示的其他数据。
调试.内存2Ctrl + Alt + M,2显示“内存2”窗口,以查看大的缓冲区、字符串以及无法在“监视”或“变量”窗口中清楚显示的其他数据。
调试.内存3Ctrl + Alt + M,3显示“内存3”窗口,以查看大的缓冲区、字符串以及无法在“监视”或“变量”窗口中清楚显示的其他数据。
调试.内存4Ctrl + Alt + M,4显示“内存4”窗口,以查看大的缓冲区、字符串以及无法在“监视”或“变量”窗口中清楚显示的其他数据。
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的―输出‖窗口中看到如下结果。
注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:。