《软件调试》

  • [P18]目前的主流CPU架构都是使用栈来进行函数调用的,栈上记录了函数的返回地址,因此,通过递归是寻找放在栈上的函数返回地址,便可以追溯出当前线程的函数调用序列,这便是栈回溯的基本原理。

这里有两个信息需要注意:
1.函数调用的栈式结构是有着非常底层的硬件支持的,如CPU就直接提供了支持。
2.这段话表明了得到当前函数的调用路径技术,也就是通过递归方式查找栈上函数的返回地址。

  • [P19]有时我们对高级语言的某一条语句的执行结果百思不得其解时,可以看一下它所对应的汇编代码,这时往往可以更快发现问题的症结。以下一节(1.6.1)将介绍的bad_div函数为例,看一下汇编指令,我们就可以知道编译器是将C++中的除法操作编译为无符号整除指令(DIV),而不是有符号整除(IDIV),这正是错误所在。

需要注意两点:
1.这段话表明了反汇编在软件调试中的一个重要作用,即对高级语言的执行结果不理解的时候可以通过看汇编代码的方式了解缘由。
2.CPU底层提供了DIV和IDIV两个指令,如今脚本动态语言比较热门,一个var关键字就可以描述一切变量,似乎不用关心变量的具体类型了,但是在CPU的底层还是有类型的区别,而且用法涉及到结果的正误。

  • [P19]像调试WinDBG这样的调试器支持同时调试多个进程,每个进程又可以包含多个线程。调试器提供了单独挂起和恢复某一个或多个线程的功能,这对调试多线程和分布式软件是很有帮助的。

WinDBG好厉害。

  • [P20]说锐不可当是因为核心的调试技术大多源于CPU和操作系统的直接支持,因此具有非常好的健壮性和稳定性,有较高的优先级。
  • [P21]在软件工程中,一个值得注意的问题是不要把Bug轻易归咎于某一个程序员,讨论Bug的时候不要使用“你的Bug”这样的说法……,所以,一种较好的方式是称呼某某模块的Bug,而不要说成是某某人的Bug。

讲得很好,能说出这样话的人是真正懂软件这个行业规律的,是内行。可惜的是,据我所知国内有非常知名的IT公司都不懂这个道理,很可悲。

  • [P25]调试器是逆向工程的主要工具。符号文件、跟踪执行、变量监视和观察、断点这些软件调试技术都是实施逆向工程时经常使用的技术手段。

这段话表明了调试与逆向工程的关系,逆向工程利用了调试技术。

  • [P29]尽管现代CPU的集成程度不断提高,机构也变得越来越复杂,但是它在计算机系统中的角色仍然非常简单,那就是从内存中读取指令,然后解码和执行。指令是CPU可以理解的并执行的操作,是CPU能够“看懂”的唯一语言。

这段话讲解的十分清楚明白,对第二章有提纲挈领的效果。

  • [P33]分页机制,即以页为单位来组织内存,通过页表进行管理,暂时不用的页可以交换到硬盘等外部存储器上,需要时再交换回来。分页机制是实现虚拟内存的硬件基础。

CPU有两个内存管理机制:段机制和页机制,首先由80386所支持。

  • [P46]保护模式是为实现多任务而设计的,其名称中的“保护”就是保护多任务环境中的各个任务安全。多任务环境的一个基本问题 就是当多个任务同时运行时,如何保证一个任务不会受到其它任务的破坏,同时也不会破坏其他任务。

这段话说明了保护模式的主要作用以及多任务环境所面临的主要问题。

  • [P48]IA-32处理器定义了4个特权级,又称为环,分别用0、1、2、3表示。0代表的特权级最高,3代表的特权级最低。最高的特权级通常是分配给操作系统的内核代码和数据的。比如windows操作系统的内核模块是在特权级0运行的,windows下的各种应用程序(例如MS Word、Excel等)是在特权级3运行的。因为特权级0下运行的通常是内核模块,所以人们便把在特权级0运行说成是在内核模式运行,把在特权级3运行说成是用户模式运行。

时间一长就忘记基本的概念了,比如内核模式、用户模式,这段话讲解的非常清楚,一下子就明白了。

  • [P67]至此我们可以归纳出中断和异常的根本差异是:异常来自于CPU本身,是CPU主动产生的;而中断来自于外部设备,是中断源发起的,CPU是被动的。

中断和异常的比较是计算机中比较重要的概念,这本书专门用了一章的篇幅讲解这两个概念。

  • [P163]操作系统是计算机系统的基本软件,它负责统一管理系统中的软硬件资源,为系统中运行的应用软件提供服务,是应用软件运行的基础……如何支持调试也是操作系统的一项根本任务。

读到这里,我发现原来调试是一项多么基本的计算机功能,而且这项功能贯穿计算机的各个层次。最底层的CPU,以及上层的操作系统、应用软件,无不提供对调试的支持。那么很自然,我会很好奇操作系统是怎么支持调试的。

  • [P166]Windows2000第一次将桌面版本和服务器版本统一起来,尽管Windows2000也有服务器版本和个人版本之分,但是二者的操作系统内核是相同的。不过像Windows2000那样用一个产品线来覆盖台式机和服务器这两大市场的模式很快就遇到了困难,因为服务器版本强调安全,台式机版本强调易用。

这是windows的一段历史,以前我还真不知道。

  • [P167]进程和程序的关系好比是类和实例的关系。一个类可以有多个实例,一个程序也可以有多个实例在运行。比如我们可以启动记事本程序多次使用不同的实例操作不同的文件。有些程序在启动时会检测是否已经有自己的实例在运行,如果有,新的实例就会立即退出,以保证只有一个实例在工作。

这段话印证了我以前的一个猜测。

  • [P167]对于不同的硬件平台,进程的空间大小也有所不同。对于32位的x86系统,每个进程的进程空间是4GB,即地址0x00000000到地址0xFFFFFFFF。为了高效地调用和执行操作系统的各种服务,Windows会把操作系统的内核数据和代码映射到系统中所有进程的进程空间中。因此,4GB的进程空间总是被划分为两个区域:用户空间和系统空间。

竟然每个进程空间都有操作系统内核数据和代码的映射,竟然是这样一种结构。以前读这些知识,并没有注意到“每个”,这次注意到了,感到神奇,还有那个2GB的映射,也很神奇。

  • [P200]为了支持调试,系统会把被调试程序中发生的所有异常发给调试器。

注意是所有

  • [P291]为了让系统和应用程序代码都可以简单方便的支持异常处理,Windows定义了一套标准的机制来规范异常处理代码的设计(对程序员)和编译(对编译器),这套机制被称为结构化异常处理,简称SEH。

Windows针对软件异常的编写和编译是有专门规范的,这点值得注意。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,122评论 0 23
  • word直接复制来了,格式就不改了。至于这门课怎么复习,只要平时实验都认真完成、报告认真写,平时分都很高;考试的话...
    Jozhn阅读 4,545评论 0 8
  • 今天是第一次写简书,我发现自己慢慢的在深夜里找不到人一起聊聊天,发现没有那样多的述说事件的存在了,开始记录...
    被艺术耽误了的男青年阅读 358评论 0 1
  • “管莹,你在家不,快点出来!” 哎,又是冰之,每天就喜欢站在我家的窗户底下大喊叫我出来玩,我家就在二楼,这个懒蛋也...
    王墨白的万物之屋阅读 506评论 0 0
  • 经历一些事情,会为这次特种兵之旅更加有意义! 张艺峰 活泼可爱,有一定的作息规律,自己的事情能够自己做,有一定吃苦...
    Mona淡阅读 385评论 1 0