IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 处理器调试断点原理总结 -> 正文阅读

[嵌入式]处理器调试断点原理总结

关于调试,可以分为两方面,有硬件调试器(st-link,jlink,jtag等),无硬件调试器(Linux内核对其上运行的应用程序的调试)

有硬件调试器

比如stm32f4,连接了st-link调试器,打断点,就是在那个地址对应的内存写入一条BKPT指令,cpu运行到这儿就停住了,调试器可以让它进入函数,下一行等执行,调试器完全拿捏住了cpu,因此可以控制它。其它嵌入式开发的单片机调试也是同样的。

这种会让cpu完全停在断点处,对于裸机程序(相当于操作系统单线程),没什么问题,但是对于操作系统多任务来说,你这样会造成系统中的所有任务停止运行,内核也停止,这个是不合理的。

无硬件调试器

有OS的情况:

这个纯粹是软件技巧了,比如OS内核对应用程序调试,会在那个应用程序代码打一个断点,就是替换一条int3指令,应用程序执行到这儿,陷入异常处理函数,判断是否这里之前打了个断点的原因,然后进行查看寄存器,变量等处理,内核说继续执行,就是把这里指令又替换为原来指令,还得在下一个位置(这个又可以分为硬单步和软单步了)再注入一个断点(目的是这个断点下一次还能生效),pc指针减一下,让pc回退到那条指令,就可以了。

这其中有两个问题,int3就是一条软中断指令,有些单片机没有软中断的话,那就只好自己制作一条跳转指令替换在这儿了。第二个问题,硬单步和软单步:

硬单步:

比如x86的cpu,就支持这个,就是执行一条指令,自己会产生异常,供我们进行相关处理(探秘INT3指令_积累点滴,保持自我-CSDN博客_int3汇编https://www.orcode.com/question/906448_ke3038.html,[求助]INT3之后到底执行哪条指令?-经典问答-看雪论坛-安全社区|安全招聘|bbs.pediy.com,)。而arm等,是不支持的,只能通过软单步。KGDB 与 指令级单步调试 – linux kgdb gdb debug

软单步:

又称为伪单步,靠GDB等进行下一条待指令预测实现,这个会比较复杂了。

没有OS:

倒是也可以,就是自己让自己单步往下走,比如cortex-m单片机,配置相应的触发寄存器,就支持替换为BKPT指令,执行到这儿会进入异常处理函数,我们就可以进行相关处理啦。Step-through debugging with no debugger on Cortex-M | Interrupt

对了再说一点,为什么int3等断点注入指令是一个字节的,因为,如果是多个字节,别的应用程序刚好想跳转到这个地址,就会产生跳转到这个地址的一半的现象,那么这个就是一个未定义指令,会让那个应用程序跑飞的。如果注入的断点指令只是一个字节,最多就是那个应用程序在这儿停住了,而不会跑飞。

总结https://bbs.pediy.com/thread-52048.htm

对于开发一个嵌入式实时OS来说,还是有必要支持对应用程序的调试的(1.不能让cpu完全停止,因为不能影响内核和别的应用程序运行才行啊(比如st-link等调试器就会这样),2. 而且不能依赖于外部硬件调试器,不然说明这个OS不好用),那么只能通过软件注入指令实现调试了,而且arm又不支持有硬件单步,所以还需要我们自己实现一个GDB等类似的下一条指令预测功能在本机或者上位机(最好是在这上面,因为性能强大)。

参考文章

用图文带你彻底弄懂GDB调试原理_Peter的专栏-CSDN博客

int3断点指令的原理和示例

arm的软断点和硬断点_xiaoyaofeidao的博客-CSDN博客_arm硬件断点

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:38:55  更:2022-01-17 11:40:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:24:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码