当前位置: 首页 > 计算机/网络 > 格蠹汇编——软件调试案例集锦

浏览历史

×

格蠹汇编——软件调试案例集锦

格蠹汇编——软件调试案例集锦

格蠹汇编——软件调试案例集锦

prev next

  • 商品货号:GZHB001
  • 商品重量:720克
  • 商品点击数:2349
  • 本店售价:€14.14
    注册用户:€14.14
    vip:€13.43
    用户评价: comment rank 5
  • 商品总价:
  • 购买数量:
    购买此商品可使用:0 积分

商品描述:

商品属性

 内容简介

本书以案例形式讨论了使用调试技术解决复杂软件问题的工具和方法。全书共36章,分为四篇。前两篇每章讲述一个有代表性的真实案例。第三篇讨论了调试工具和调试系统的设计方法。第四篇收录了使用调试器探索计算机世界的若干学习笔记,包括在调试器中细品CPU,通过调试器观察和解码堆块结构,透视Windows 8的新类型应用以及使用调试器监视启动、睡眠和唤醒三大基本过程等。
目  录
目录 

笃 行 第 一
第1章 从堆里抢救丢失的博客 3
第2章 修复因误杀而瘫痪的系统 11
第3章 徒手战木马 18
第4章 调试笔记之侦查广告插件 23
第5章 拯救“发疯”的Windows 7 30
第6章 再解电源服务溢出崩溃 37
第7章 三解电源服务溢出崩溃 44
第8章 拯救挂死的PowerPoint 60
第9章 经典阅读器的经典死锁 71
明 辨 第 二
第10章 转储分析之双误谜团 81
第11章 混乱数据何处来——标准文件流有关的陷阱 98
第12章 解救即将被断网的系统——调试补丁安装失败 108
第13章 SDK安装程序卡壳之谜——兼谈函数的异常出口 123
第14章 是谁动了我的句柄 138
第15章 转储分析之系统挂在DPC 148
第16章 转储分析之探寻唤醒失败原因 156
第17章 解救陷入死循环的MSN 169
第18章 寻找系统中的“耗电大王” 184
器 用 第 三
第19章 Windows 8的内核调试增强 195
第20章 漫谈Android系统的调试模型 203
第21章 趣谈托管程序的辅助调试线程 227
第22章 漫谈SOS扩展 234
第23章 趣谈CLR4的调试模型重构 246
第24章 如何跟踪ACPI代码 253
第25章 如何调试窗口大总管 263
第26章 嵌入式系统调试浅谈 273
第27章 海森伯效应一例 282
致 知 第 四
第28章 使用调试器来认识计算机世界 293
第29章 在调试器中细品CPU 300
第30章 系统启动系列 320
第31章 在调试器中观察计算机的睡眠过程 358
第32章 在调试器中观察计算机的唤醒过程 380
第33章 使用调试器探索托管程序的执行起点 388
第34章 解读编码后的HEAP_ENTRY结构 397
第35章 在调试器中看Win7打电话回家 404
第36章 使用调试器透视Windows 8的METRO应用 418
附录A 准备试验环境 443
附录B 设置内核调试环境 445
附录C 面向问题的索引 449
附录D 英文术语索引 451
附录E WinDbg命令索引 453
附录F 常用的汇编指令(x86) 460
 
前  言
前言

在过去十几年中,一种新型的材料风靡全球。它天性柔软,可以任意塑造,用途广泛,几乎无所不能。在这种材料的驱动下,优胜劣汰的规则悄然变化。善于利用这种新材料的一夜成名,抵制或者犹豫徘徊的迅速没落。这种材料就是软件。有人说,软件在吞噬这个世界。但与其这样说,还不如说人类正在用软件重构自己的文明。
众所周知,人类对软件的依赖越来越大。但天性“软弱”的软件是否能承受如此之重呢?根据我这么多年从事软件工作的经验,这里确实需要画上一个大大的问号。
总体说来,软件的现状很糟糕。借用一句美国同行的话,“没有别的话好说,今天的软件很差劲”。更糟糕的是,很多人没有意识到这一点。
软件领域存在很多问题。略去臃肿缓慢、大量消耗资源、不够安全、稳定性差等外在问题不谈,最致命问题的是在软件行业内部,对软件的误解和错误的价值观大行其道。软件的根本在于代码,但我们却常常背离这个根本,轻视编码工作,空喊如何提高软件质量。
与看得见摸得着的硬件相比,软件生来就抽象难懂。很长一段时间里,只有少数的聪明人会编写软件。随着编程语言和开发工具的进步,编写软件看似变得简单了,但其实这只是一种误解。这种误解导致很多人低估了软件开发的真实难度。于是,错误的认识再加上软件行业的急速发展共同促成了一个可怕的现状:神圣的程序员职业被拉下神坛,沦为软件蓝领,最近几年更被打上了“码农”这样的低价标签。
一方面是人们对软件的要求越来越高,软件的复杂度在提高,另一方面是轻视编码,程序员的素质在降低。于是便形成了今天软件行业中的一个普遍存在的根本问题:软件的复杂度超出了软件开发者可以驾驭的程度,软件质量在最重要的开发源头危机四伏。
程序员是真正为软件大厦“添砖加瓦”的人,程序员的水平高低直接关系着软件的质量优劣。高水平程序员对整个计算机系统融会贯通,写代码时有成竹在胸。他们写出的代码框架挺拔,细节缜密,而且短小精悍,不枉费“一滴笔墨”。这样的代码给人看时有条有理,如读美文,提交给计算机执行时,轻快顺畅,一蹴而就。而水平差的程序员则相反,很多概念交织脑海中,不清不楚,只知其一,不知其二。写代码时畏首畏尾,东拼西凑。写出的代码杂乱无章,驴唇不对马嘴,冗长拖沓,又臭又长。这样的代码给人看时摸不着头脑,如坠云里雾中,提交给计算机执行时,磕磕碰碰,到处卡壳。一般说来,程序员的水平越低,写出来的冗余代码越多,这是今天软件普遍患有“肥胖症”的一个根本内因。而软件的复杂度和软件的大小密切相关,软件越庞大,软件的复杂度便越高。软件的复杂度越高,会让程序员越发畏首畏尾,惧怕改动现有代码,加入更多的冗余代码,继续增加复杂度,陷入可怕的恶性循环。
代码是软件的根本。写代码是值得修炼一生的一门技艺。提高对代码的感知力和驾驭力是所有软件工作者都必须要修炼的基本功夫。如何修炼呢?学编程语言,学操作系统,学硬件原理,学面向对象,学虚拟机,学云计算,学软件工程……把所有东西通通学一遍?即使都一一学过了,我觉得也还不够,还缺少最重要的融会贯通。
写作目标和书名由来
关于融会贯通,宋儒理学之集大成者朱熹早有精彩的论述。据说,融会贯通这个成语就是他发明的。宋代人黎靖德编辑的《朱子语类》收集了大量朱熹与他的学生问答的语录。在卷九《论知行》中记载了这样一段精彩的对话。朱熹教导学生说:“学者喫紧是要理会这一个心,那纸上说底,全然靠不得。”意思是不能只停留在书本上,要用心去理会。但学生们听了后,却有人没有顺着这个思路去理解,天马行空般说出一套空话来:“心之体与天地同其大,而其用与天地流通。”于是朱熹就顺着这个反面典型继续说道:“又不可一向去无形迹处寻,更宜于日用事物、经书指意,史传得失上做工夫。即精粗表里,融会贯通,而无一理之不尽矣。”教导大家不要一味去追求空理论,与其那样,还不如在平常事物上下功夫。
好一个“精粗表里,融会贯通”。反复读这句话,我欣然有所悟,真正从国学中汲取到营养。虽然这句话本来不是关于软件的,但这个道理完全可以用在软件上。在我看来,很多做软件的同行都学了不少的书本知识,但却缺少用心理会,尤其缺少针对实际问题的钻研探索和刨根问底。也就是缺少宋儒们所说的穷理精神。关于“穷理”和“贯通”,《朱子语类》中还有一段很精彩的论述:
穷理者,因其所已知而及其所未知,因其所已达而及其所未达。人之良知,本所固有。然不能穷理者,只是足于已知已达,而不能穷其未知未达,故见得一截,又不曾见得一截,此其所以于理未精也。然仍须功夫日日增加。今日既格得一物,明日又格得一物,工夫更不住地做。如左脚进得一步,右脚又进一步;右脚进得一步,左脚又进,接续不已,自然贯通。
——《朱子语类》(卷一八)
“治”软件并不比治学问简单,必须把编程语言、操作系统、硬件基础、编译工具、调试器等等一大堆东西理解透彻,“化”为自有,然后才能游刃有余,独当一面。很多人浅尝辄止,“足于已知已达”,“见得一截”,不曾见得另一截。于是练就的只能是“三脚猫”功夫,做做打零的工作或者在人群中当当南郭先生是可以的,但成不了大器。如果能像朱熹说的那样,今日格得一物,明日又格得一物,“左脚进得一步,右脚又进一步”,那么便离成功越来越近了。
上面一段话中,还提到了一个重要的理学概念,那就是格物。何谓格物呢?朱熹曾这样定义:“格物者,格,尽也,须是穷尽事物之理。若是穷得三两分,便未是格物。须是穷尽得到十分,方是格物。”简单理解,格就是穷尽,或者说研究透彻的意思,物即事物和道理。所谓格物,就是要推究事物的机理,与上面的“穷理”很类似。与格物常常一起出现的另一个概念是致知。致知的含义是要不断推进自己的知识,由已知而推及未知。
格物致知都出自儒家的经典著作《大学》,也就是那段广为流传的处世名言:“欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知;致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。”
对于这几句“经文”中的格物致知,朱熹在他的名著《大学章句》中有一段非常好的诠释,摘录如下:
所谓致知在格物者,言欲致吾之知,在即物而穷其理也。盖人心之灵莫不有知,而天下之物莫不有理,惟于理有未穷,故其知有不尽也。是以《大学》始教,必使学者即凡天下之物,莫不因其已知之理而益穷之,以求至乎其极。至于用力之久,而一旦豁然贯通焉,则众物之表里精粗无不到,而吾心之全体大用无不明矣。此谓物格,此谓知之至也。
——朱熹《大学章句》
这段话常被称为“格物补传”,是朱熹在整理《大学》一书时,为缺失章节所做的补充。我非常喜欢这段话,曾经反复阅读和背诵过。在写作这一段内容时,禁不住又读了几遍。不过颇为遗憾的是,我在上大学时并没有读过这段话。香港大学将“明德格物”作为校训,或许那里的学生都读过《大学》吧。
其实,与做学问有所不同的是,做软件有一个得天独厚的优越方法,那就是我一直主张的基于调试的方法。调试设施是现代计算机与生俱来的固有部分。发明现代计算机的前辈们设计这些设施的目的就是为了帮助人类驾驭这些高速度的机器。利用这些设施,计算机可以暂停、可以慢速前进、可以任由人类摆布。调试设施的一个直接用途就是帮助人们发现计算机软硬件的臭虫(bug)。但如果认为调试设施只是用来抓臭虫的,那么便大错特错了。以调试器为核心的调试设施是征服计算机世界的强大武器,除了用来侦错外,还有很多用途,包括帮助我们探索和学习计算机系统。借助调试设施,我们可以深入到计算机系统的每一个角落,“精粗表里”无处不到。坚持使用这种方法,便可以像朱熹说的那样,“今日既格得一物,明日又格得一物”,“接续不已”,不断坚持,便“自然贯通”了。
过去十来年中,我几乎每天都会用到调试器,我把它比喻为随身携带的一把剑。借助这把剑,我领会了计算机系统的奥秘。借助这把剑,我轻松追赶层出不穷的新技术。借助这把剑,我可以直抵软件的最深处,洞悉其中的精华与糟粕。借助这把剑,我更清楚的看到了软件的现状。
但让我诧异的是,调试技术并没有得到应有的普遍重视。当我向一些同行介绍调试方法时,常常听到惊讶的声音:“还可以这样玩(软件)啊?!”
我希望更多的同行能学会用调试器这把剑,因此写了《软件调试》一书分享我所知道的调试技术。因为篇幅限制,《软件调试》偏重理论,实例较少。当时计划以后再分册写案例性的内容。本来以为一两年可以出一本。但实际进展远远没有当初想象的快。好的案例是可遇不可求的。写案例有点像写小说,更需要灵感触发。就这样,差不多五年时间过去了,才积攒出第一册调试案例。在思考书名时,曾经想到用“捉虫记”或者“调试战役”这样的名字,但最终还是受格物一词启发,取名“格蠹汇编”。蠹(音杜)的原意是蛀虫,借来指臭虫,代表软件调试。
关于名字中的“汇编”,意思是很多案例汇集在一起,并不是指汇编语言。虽然本书的部分章节中有汇编代码出现,而且附录中列出了常用的汇编指令,但是这不是专门讨论汇编语言的书。寻找汇编语言专著的读者到此赶紧打住,另选他书。这几句话故意另起一段,全为醒目。
总的来说,格蠹是作者新创的一个词,既可以当名词用,又可以当动词用。做名词时代表调试之学,做动词时代表钻研和实践这门学问。之所以新造这个词,旨在希望越来越多的软件同行不再把调试技术看作是捉虫小技,像古人重视格物那样重视这门技术,把它当作一门学问来学习。《格蠹汇编》是作者过去五年中探索和实践这门学问的成绩汇报和学习笔记。
主要内容和阅读方法
这本书讲了很多故事,大多是作者使用调试器这把剑在软件世界中“作战”的故事。故事的时间基本在过去五年中。故事内容的跨度很大,大多数故事是相互独立的,互不相干。但所有故事的主角基本相同,总是两个:一个是作者本人,另一个是调试器,大多时候是两个主角一起出场,但也有少数例外。
本书正文共36章,分为4篇,每篇包含9章。篇章不是按时间划分的,而是按用途——读者阅读的用途来划分的。4篇的主要内容略述
商品属性
[作者] 张银奎
[出版社] 电子工业出版社
[图书书号/ISBN] 9787121196072
[出版日期] 2013年03月20日
[开本] 12开

商品标签

购买记录(近期成交数量0)

还没有人购买过此商品
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页

用户评论(共0条评论)

  • 暂时还没有任何用户评论
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
用户名: 匿名用户
E-mail:
评价等级:
评论内容: