《Visual C++ 2010入门教程》系列六:VC2010常见调试技术

犹豫了好久,最终还是决定开始这一章,因为我不清楚到底有没有必要写这样的一章,是应该在这里说明一些简单的调试方法,还是干脆直接让大家去看《Visual C++ 2005入门经典》的第10章,因为那里已经说出了我们几乎所有的常见调试方法。

另外一点就是这一章也许会是《Visual C++ 2010入门教程》系列的最后一章了,因为在入门的这方面,我已经找不到值得和大家分享的经验了,算是黔驴技穷了吧。回头看看这个系列,最初的目的就是为了解决一些初学者常见的问题,教会初学者如何使用VS2010这个工具,因为我也经历过那些阶段,我希望我能帮助那些“曾经的我”少走弯路。

过去,我们讨论了一些诸如C++和VC有什么区别、怎么用C++做项目这样的问题,介绍了SVN的使用,常见功能的快捷方式,VC配置等等。接下来就是最后的一些与调试相关的东西与大家分享。另外强烈推荐对基本VC调试技术不熟悉的朋友去看看《Visual C++ 2005入门经典》的第十章。
image

断点

没有比断点更常用的了,通过点击代码左边边栏或者移动光标到指定行按F9等都可以添加断点。值得注意的是并非每一行都可以添加断点,这个就留给大家去实践中体会吧。

通过菜单》调试》窗口》断点或者直接按Alt+F9可以调出断点选项卡,通过选项卡我们可以设置条件断点、数据断点等。
image

单步和监控

调试中除了F5之外,另外更常用的估计是F10、F11了,前者是一次一个语句的执行,或者可以看出一行;而后者如果出现能进入的子过程,那么就会进入子过程。这个请大家找个程序,至少要有函数调用的,当断点触发的时候,请自行体验一下F10和F11的效果你就明白了。说白了,实践才是最好的老师,我负责告诉你有这么个东西。
image

两个选项卡,局部变量和自动变量,它们都负责显示一些当前断住状态下的变量的值,注意,这些只有在程序中断的时候才有意义。自动变量选项卡并非指auto变量,而是指VS帮我们猜想我们可能感兴趣的一些变量的值,或者函数返回值,而局部变量基本上就是本过程的一些变量的值了。

注意,这些选项卡不仅仅可以用于查看,甚至可以用于你临时修改它们的值,方法就是双击值就可以了,如下图所示:
image

这时候你可以把它临时改成false都行哈。

大家看到监视1了吗?这个选项卡是留给用户的,如果前面的变量太多你不想用滚动条滚来滚去的看就可以在这里输入要监视的变量了:
image

这里我检查了当前语言字符串的设置。注意并非什么变量都可以检视,必须是调试器可以为我们推断出来的才行,即调试器知道它的地址是什么。如上图所示有一个特殊的用法$err,hr这个是VS特别的,它的意义相当于让调试器帮你获取GetLastError的值,这在Windows编程的时候非常有用。

对于一些指针类型的变量我们还可以在监视里面对它做强制转型,比如你的函数传递一个void* p进来,但是你知道这次你传递的是一个Data结构体的指针,而调试器是无法知道这个p指向的是Data,所以你可以在监视中输入(Data*)p。这样调试器会自动帮我们把他当做Data结构体的指针来识别。

调用堆栈

调试过程中调用堆栈实在是太重要了,因为它指出了你的程序是正在处于什么状态,是谁调用了谁:
image

如果你没有这个选项卡可以通过Alt+7或者调试》窗口》调用堆栈把它调出来。

运行时也可以获取调用堆栈的,这个需要Windows API的帮助,这个请看我写的这个。

日志

日志有很多种,你可以写一个专门的日志系统来处理日常的日志工作,但是这里我只说把信息数出到VC的输出窗口,像这样:
image

       使用Windows API OutputDebugString来实现,当然你也可以对他做一些封装,在程序中在重要的代码部分记录下日志,这对调试很有帮助,你这样会一眼知道哪里出了问题,甚至你可以把调用对战嵌入到这个包装中去:

image

          通过模块选项卡发现外部模块错误

image

假设我们依赖于一个外部库Test.dll,这个DLL在系统目录下面有一个,而在Path路径下面还有一个,而他们的版本不同,甚至只是名字相同而内容完全不同。或者其他一系列的类似的问题,都可以通过模块选项卡来察觉,另外这个模块选项卡还告诉了我们我们依赖了那些外部DLL,这在发布的时候很有用,使得我们可以漏掉需要的DLL。

通过暂停按钮发觉死锁和死循环

当我们的程序失去响应的时候我们不妨尝试点击调试窗口上面的暂停按钮:
image

如果中断(暂停)成功那么我们会看到死锁或者死循环的调用堆栈了。

断言(assert)
  assert大家应该很熟悉了吧,这是最直接提供错误信息的方法了。特别的,当我们在调试的时候,调试器会帮助我们定位到断言触发的地方。

暂时就想到这么多,如果您还有其它好Case,一定不要忘了要同大家分享。

转眼间毕业一年了,感触良多。每当我情绪低落的时候,我就看苏珊大妈的视频,因为苏珊大妈是我的偶像,因为她告诉我有梦想就一定要坚持,当你具备了成功的基础的时候,梦想就会慢慢的实现。

 

         寻梦不止,学习不止。天行健,君子以自强不息;地势坤,君子以厚德载物。

转载于:https://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115636.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Visual C++ 2010入门经典(第5版)》是一本介绍使用Visual C++ 2010编程的经典教材。该书提供了大量丰富的示例代码和详细的讲解,适合初学者入门使用。 书中的源码是作者编写的一些示例程序,用于演示不同的编程技巧和使用Visual C++ 2010开发的各种应用。这些源码涵盖了基本的程序结构、控制流、函数、数组、字符串、指针、类和对象等常见编程概念和技术。 通过学习书中的源码,读者可以了解如何使用Visual C++ 2010创建、编译和运行程序。源码中的注释可以帮助读者理解代码的作用和实现原理。读者可以通过运行这些源码,观察程序的运行结果,从而更好地理解和掌握编程的基础知识和技巧。 此外,书中的源码还可以作为读者的编程实践材料。读者可以根据源码中的示例代码,对其进行修改和扩展,进一步练习和巩固所学的知识。通过这种实践,读者可以提高自己的编程水平和解决问题的能力。 总之,《Visual C++ 2010入门经典(第5版)》的源码是读者理解和学习编程的重要资料和工具。读者可以通过研究源码,学习编程的基本原理和技术,在实践中提高自己的编程能力和创造力。希望读者可以充分利用这些源码,从中获得丰富的编程经验和知识。 ### 回答2: 《Visual C++ 2010入门经典(第5版)》是一本介绍C++编程和Visual C++ 2010经典教材。该书为读者提供了一些实用的源码示例,帮助读者更好地理解和掌握相关的知识。 源码是作者提供的用于演示和教学的程序代码。读者可以通过阅读源码来学习如何使用Visual C++ 2010进行程序开发。源码中包含了一些常见的编程案例,如窗口应用程序、图形界面程序、网络编程、数据库操作等。这些源码可以帮助读者理解和掌握C++Visual C++的编程语法、函数和类库的使用方法,培养读者解决实际问题的能力。 学习源码时,读者可以逐行阅读代码,并结合书中的解释和示例运行程序,观察程序的执行结果。通过深入分析源码,读者可以理解程序的工作原理,学习到一些编程的技巧和经验。同时,读者也可以根据自己的需要对源码进行修改和扩展,进一步提升自己的编程能力。 对于初学者来说,《Visual C++ 2010入门经典(第5版)》的源码是一个很好的学习资源。通过阅读源码,读者可以了解到实际应用中常见的编程问题以及相应的解决方案。同时,源码也可以激发读者的创造力,鼓励他们独立思考和探索新的编程技术。 总之,《Visual C++ 2010入门经典(第5版)》的源码提供了一个学习和实践的平台,可以帮助读者掌握C++编程和Visual C++ 2010的开发技术,培养解决实际问题的能力,为日后的编程工作打下坚实的基础。 ### 回答3: 《Visual C++ 2010入门经典》(第5版)是一本学习Visual C++编程语言的经典教材,本书包含了丰富的例子和源码,帮助读者理解和掌握Visual C++的开发技巧和编程思想。 这本书的源码是作者用来实现书中例子和练习的程序代码。通过阅读源码可以更好地理解书中的知识点,并且可以通过修改和调试源码来学习和实践Visual C++编程的技巧。 源码是以代码的形式呈现的,读者可以在自己的计算机上打开源码文件,通过编译和运行来观察代码的执行结果。当然,在使用源码时,读者需要注意以下几点: 1. 需要有Visual C++ 2010的开发环境:由于源码是用Visual C++ 2010编写的,所以读者在阅读和使用源码时需要在自己的计算机上安装Visual C++ 2010的开发环境。 2. 需要正确设置项目属性:在打开源码时,读者需要正确设置项目的属性,包括编译选项、链接选项等。这些属性设置会影响源码的编译和运行结果。 3. 需要理解代码逻辑:源码是作者编写的程序代码,读者需要通过阅读和理解源码来了解代码的逻辑和实现方式。可以通过注释、变量命名等来帮助理解代码。 通过阅读和使用《Visual C++ 2010入门经典》(第5版)的源码,读者可以更好地学习和掌握Visual C++编程语言,提升自己的编程技能和解决问题的能力。但需要注意的是,源码只是一种学习工具,读者还需要通过自己的实践和思考来深入理解和应用所学的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值