程序中的断点

我们知道什么是断点,通过断点我们可以很方便地对程序进行调试。在嵌入式开发领域中,我们还得知道存在程序断点(program breakpoint)数据断点(data breakpoint)之分。

1、程序断点

程序断点就是指处理器的指令断点。通俗的说,就是当程序运行到函数的某个地方就会停下来。程序断点又分为软件程序断点硬件程序断点

在用VS进行软件调试时可以设置很多断点,这些断点都是软件程序断点。处理器在运行的过程中如果碰到一条非法(或无效)指令,就会出现一个异常中断,软件程序断点就是利用这个特性实现的。当设置一个软件程序断点的时候,调试工具就在我们所想设置的内存位置上防止一条非法指令,同时将被替换的指令保留起来。当程序运行到了被非法指令替换的地方时,处理器所产生的异常中断一方面在中断服务中恢复被替换的指令,另一方面将控制权交给调试工具。从理论上说,软件程序断点可以设置n个,n的大小由内存容量决定。

在嵌入式系统中,如果调试的程序不是位于内存中,而是位于像闪存这样的存储器中(比如引导加载器的部分代码),此时就无法使用软件程序断点了,因为闪存中的内存并不能像内存那样方便更改。此时只能通过配置处理器的断点寄存器的方式实现的。当处理器运行到断点寄存器所指示的位置的指令就会产生中断,调试工具就通过该中断使我们获得干预的机会。处理器所能设置的硬件程序断点数据是有限制的,可能最多也就4个

2、数据断点

当调试程序时,如果发现所定义的一个数据结构中的某一变量总是被意外地更改,查出这类问题的根源 可并不容易。如果处理器能提供一种功能——当某一变量的值被更改时能自动停止下来就好了,这样就可以通过调用栈找到问题的根源。这就是引入数据断点的目的。数据断点与硬件程序断点很相似,需要在处理器的寄存器中设置所监视数据变量的内存地址。当被监视的内存单元被修改时处理器将产生中断,调试工具利用这一中断让我们获得检查程序的机会。

处理器一般都提供了硬件程序断点这一功能,但数据断点却未必。选择处理器时考虑其是否支持数据断点是很有必要的,这会让我们获得另一种有效的调试手段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值