软件调试(一)

软件 = (程序 + 文档)的集合;程序的核心是按一定顺序排列的一系列指令。

将指令看做一块积木,软件开发就是使用这些积木修建一个让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寄存器内容给调试者,调试者可以输入内存观察指令或执行其他调试功能,待调试结束或,输入某一个命令恢复执行。这是调试器需要恢复寄存器的值,将保存的指令恢复回去,然后跳转回去继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值