软件 = (程序 + 文档)的集合;程序的核心是按一定顺序排列的一系列指令。
将指令看做一块积木,软件开发就是使用这些积木修建一个让CPU(中央处理器)在其中运行的交通系统。这个系统中有很多条不同特征的道路(函数)。有些道路只允许一辆车在上面行驶,一辆车驶出后另一辆才能进入,有些道路可以让无数车辆同时在上面飞奔。这些道路都是单行道,只可以沿一个方向行驶。在这些道路之间,除了明确的入口(entry)和出口(exit)之外,还可以通过中断和异常等机制从一条路飞跃到另一条,另一条又可以飞转到第三条或直接飞回到第一条。在这个系统中行驶的车辆也很特殊,它们的速度很快,而且“无人驾驶”,完全不知道会跑到哪里,唯一的原则就是上了一条路便沿着它向前跑…
如果说软件的执行过程好像是CPU在无数条道路(指令流)间飞奔,那么开发软件的过程就是设计和构建这个交通 络的过程。其基本目标是要让CPU在这个 络中奔跑时可以完成需求(requirement)中所定义的功能。对这个 络的其他要求通常还有可靠(reliable)、灵活(flexible)、健壮(robust)、易于维护(maintainable),可以简单的改造就能让其他类型的车辆(CPU)在上面行驶(protable)…
分析(analysis) + 设计(design) + 编码 (code) + 测试(test) + 发布(release) + 维护(maintain) + 支持(support)
software debug:软件调试,泛指重现软件故障(failure)、定位故障根源,并最终解决软件问题的过程。
定位软件错误可以看做一个特别的且复杂的搜索问题。被搜索的目标是软件问题所发生的的系统,从所包含的信息量来看,这个空间通常是很庞大,一个典型的计算机系统中包含着几十个硬件部件、数千个软件模块,每个模块又包含着以KB或MB为单位的大量指令(代码)。另一方面,这个搜索问题并没有明确的目标和关键字,通常只知道不是非常明确的外在症状,必须通过大量分析。才能逐步接近真正的内在原因。
Windows本地调试中的软件断点功能通常是依赖于CPU的断点指令(对于x86,即INT3),CPU执行到断点指令时中断下来,以异常的方式 告给操作系统,操作系统再将这个事件分发给调试器。
调试器实现端点功能指令: jda Y
执行的操作是将AC(accumulate)寄存器的内容存入地址Y,然后把程序计数器(program counter,相当于IP)的值存入AC寄存器,并跳转到Y+1。当程序执行到断点位置是,系统会执行位于哪里的jda指令,跳转到调试器代码。调试器根据AC寄存器的内容知道这个断点的发生位置,找到它对对应的断点记录,然后保存寄存器的内容(上下文),并打印出存储在位置Y的AC寄存器内容给调试者,调试者可以输入内存观察指令或执行其他调试功能,待调试结束或,输入某一个命令恢复执行。这是调试器需要恢复寄存器的值,将保存的指令恢复回去,然后跳转回去继续执行。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!