作为软件工程专业学生,刚进大学的榜首堂编程课,是在Microsoft Visual C 6.0顶用C 打印出“Hello World”:点一下屏幕上方的三角形按钮开端调试,程序无错便在屏幕最上层弹出一个黑框,黑框里的榜首行文字,是“Hello World”。

待作业之后,发现编译调试C 程序,不在Windows环境下也能够,只需求在Linux体系中输入两行指令:

gcc-ohelloworldhelloworld.c
./helloworld
#HelloWorld

也能得到想要的答案:Hello World!

随着作业越久,写的代码越发杂乱,调试代码在作业中的占比越发高了起来。怎么能够保证调试代码方便、方便又专业呢?

养成阅览习气三年的我,榜首反应是找一本书来补补课。

寻书过程很简略,只以“C 调试”作为关键字于书城中查找便好。做一些简略比照,我最终选定《C/C 代码调试的艺术》看了起来。全书近16万字,我依照书中示例边敲边看,累计花8个半小时看完。

一般解说某项技能的技能书,会不止解说该项技能,还会将该项技能的来龙去脉理清楚,并将相关联常识点都进行收录(乃至会引荐更精细化的书)。所以完好读完一本技能书相较阅览某篇博客获取常识是有很大优势的,每读完一本技能书,都会在脑子中维护一个关于某项技能的全面目录。当作业中需求用到该项技能时,先翻阅脑中目录,如若脑中详细内容不再清晰,则再根据书中目录寻觅详细答案。

《C/C 代码调试的艺术》,顾名思义,便是关于“C/C 代码调试”的全面解说。书中大体内容如下:

全书围绕C/C 程序调试这一主题,体系深化地介绍了在Windows和Linux操作体系上怎么高效地调试C/C 程序。本书分为11章,内容涵盖了程序调试的基本常识、Visual C 调试的基本功能与技巧、Linux体系中gdb东西的运用、死锁调试、动态库调试、内存检查、长途调试、转储文件调试分析、发行版调试,以及调试的高级话题和调试方面的扩展常识。

如上简介所述,作者将C/C 代码的调试分作两个方向解说,一是在Windows上根据Visual Studio的调试;二是Linux体系中gdb的运用。每一个章节,即讲了Windows上的操作办法,也介绍了Linux下的处理手法。

书中内容,由浅入深,不论读者是初学者仍是资深开发者,都能够从书中获取到想要的常识。对初学者来说,是新常识的获取;对资深开发者来说,是参考手册。

我极端佩服作者关于书中粗浅部分的处理。关于刚开端学习调试程序的新手(visual studio相当杂乱,即便是内行,也或许要花很长时刻找一个按钮)来说,找到调试软件中的某个按钮,是极或许花费半小时乃至更久的,作者在书中,将这些按钮方位经过截图展现的清楚理解。此种细节的处理,体现了作者的谨慎、耐性与专业。

除了介绍简略常用的调试技巧之外,书中还介绍了许多高端玩法。

  • C/C 程序的内存由程序员自己管理,当程序逻辑不谨慎时,很简略造成内存泄露。本书第6章,是专门的内存检测章节,经过修正编译选项、启用地址擦除体系等办法,堆溢出、栈溢出,都能被检测到。
  • 当开发环境不由咱们自己掌控时,能够进行长途调试,Windows连Windows、Linux连Linux,Windows连Linux,只要有网络有东西,万物皆可调试。
  • 发布给客户的程序不包括调试信息,调试起来会很困难,此刻能够借用调试版本中的调试符号供发行版本运用。
  • 想要更深化的了解程序背后的运作机制,能看懂些汇编代码是必不可少的技能。看懂汇编代码,便能凭借东西不修正源码直接修正二进制文件对程序进行一些改造。(此办法为黑客必备技能。)

不论是简略调试仍是高端玩法,书中都有完好Demo能够让读者跟着着手。依照书中示例代码进行调试时,我记录了部分会在作业中频繁运用的一些gdb指令(Windows上的调试,大都是图形界面,需求用时直接翻书便好),摘抄到此处供查阅:

#开端调试
gdbappname
#在filename.cpp的第350行添加断点
bfilename.cpp:350
#打印变量名
printvar_name
#检查断点列表
infobreak
#检查调用栈
bt
#能够直接切换栈
frame3
#列出所有的局部变量
infolocals
#检查当时函数的参数
infoargs
#检查当时帧的信息
infoframe
#持续履行
c
#履行下一行
next
#进入下一个函数
s
#跳出当时函数
finish
#展现字符串打印的长度
showprintelements
#将字符串打印长度约束去掉
setprintelements0
#设置打印更漂亮
setprintpretty
#更漂亮地打印数组
setprintarrayon/off
#打印vector的值
print*(vector_name._M_impl._M_start)@2
#检查当时方位10行源代码
list
#检查函数的源代码
listfunc_name
#在gdb中履行shell的ls指令
shellls

更多的指令,能够在gdb环境中运用help随用随查。

本书的引荐语为:“《C/C 代码调试的艺术》是一本关于C/C 调试的‘百科全书’,关于C/C 调试的方方面面,书中都有详细解说。

“如果您的作业中经常运用C/C 调试,是能够凭借本书于脑中形成一个关于调试的全面目录,然后将书常备案头待需求时再随手翻阅的。”