Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1320794
  • 博文数量: 179
  • 博客积分: 4141
  • 博客等级: 中将
  • 技术积分: 2083
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-21 20:04
文章存档

2024年(1)

2019年(13)

2016年(1)

2014年(16)

2011年(8)

2010年(25)

2009年(115)

分类: 系统运维

2009-03-22 19:38:32

断点和单步调试

断点通常需要两层的表示:

l  逻辑表示:指在源代码中设置的断点,用来告诉用户的;

l  物理表示:指真实的在机器码中写入,是用来告诉物理机器的。断点必须存储写入位置的机器指令,以便能够在移除断点的时候恢复原来的指令。

断点存在条件断点。

断点存在多对一的关系,即多个用户在同一个地方设置断点(多个逻辑断点对应一个物理断点),当然也有多对多的关系。下图展示了这样的一个关系:

断点的设置和激活

下面是断点的设置算法:

    

下面是简单的物理断点数据结构:

断点激活算法:

断点的验证

断点验证算法:

临时断点

临时断点是指只运行一次的断点。

内部断点

内部断点对用户是不可见的。他们是被调试器设置的。

一般主要用于:

l  单步调试:内部断点和运行到内部断点;

l  跳出函数:在函数返回地址设置内部断点;

l  进入函数

进入函数和跳出函数

下图展示了跳入函数和跳出函数:

进入函数算法:


下图是step over算法:


阅读(8411) | 评论(31) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2009-04-21 18:47:00

set the debuggee running 、start the debuggee running是针对debuggee而言的。就单cpu而言的话,同一时刻当然不可能有2个PC REG,当debugger在按照上述算法查找next source statement时,PC只能是针对debugger的,这也就是为什么要用simulated_pc来在debugee text address space内寻址了。同理做比较时也应与debugee的PC比较,这才能达到确定是否满足next source statement要求的目的。

chinaunix网友2009-04-21 18:36:28

simulated_pc:=real_pc?? 这里怀疑是印刷有问题了,应该go to iv的,不然请看下面一张图,可以对比 同时提醒博主一下,这个是step over算法哦,叫跳出的话恐怕大家会看迷糊的,当然step out也夹杂其中了,呵呵

chinaunix网友2009-04-21 18:31:38

advance our simulated_pc to the next instruction,这当然是指令计数增1啊,没有什么疑问的

chinaunix网友2009-04-21 16:30:38

.就是那个:vi .advance our simulated_pc to the next instruction;这一步实际上做了哪些工作啊,怎么又马上回到simulated_pc:=real_pc??

micklongen2009-04-21 16:13:00

real_pc应该是指被调试被中断的时候的pc值吧?我是这么理解的。 如果是的话,那set the debuggee running 、start the debuggee running都会改变的real_pc的值的。但是advance our simulated_pc to the next instruction好像只改变simulated_pc的值,没改变real_pc的值吧?