韦东山 STM32 嵌入式单片机RTOS 调试专题 ARM架构调试技巧
ARM单片机/RTOS项目
20小时
¥1399100005收藏
立即购买单片机_RTOS调试技术
都会写代码,调试拉开差距
都是工程师,谁不会写代码?调试水平高,才能胜出!
我在中兴时,一牛人同事到点就下班,从不加班,为何?
系统出Bug时,他出马就能搞定!公司得供着他。
他是我的榜样。
还是在中兴,2007年,我用了一个月解决了困扰部门多个产品的诡异问题,发现是内核处理信号的bug。
因此获得了当年的S级员工奖励。
凭借着强大的调试能力,各个科室碰到一些疑难问题都会找我。
年终奖也位于前列。
解决Bug,升职加薪赚外快
技术部门,技术说话,技术强要么升职要么加薪要么自己干。
不想太累还可以接外包。
2022年某大厂的朋友研发猫砂机器人碰到问题,他们调试了2、3个月,我去通宵调了2天搞定。
你有没有碰到过这些疑难问题?
- 库函数出错
千锤百炼的open、fclose函数,怎么会出错 - 加上printf程序没问题,去掉就出错
- 改改优化等级,程序就无法运行了
A()
用不了,for(int i = 0; i < 1; i++)A();
就没问题- 死机,完全没反应、没输出
- 发生Hardfault,有没有通用的分析方法?
这些众多问题我们都有办法解决!
RTOS的调试难题
假设你有A、B、C三个线程,
你如何确定它们分别执行到了哪里?
即使你有调试器,你最多能调试一个线程,其他线程的运行情况你无从知道!
假设线程A在处理数据,线程B在等待A的数据,线程C独立运行,
现在出问题了,你不知道线程A、B、C分别跑到了哪里?
怎么办?
培训大纲
在rtt上100行代码实现coredump
本课程,提供源码,这些源码可以用在你们的工程里,不依赖于具体
百问网在rt-thread上实现了coredump功能:
- 出错时可以coredump
- 也可以输入命令触发coredump
- 然后使用百问网的CoreDebugger即可分析各个线程的调用过程
- 实现coredump命令
-
ARM架构
- 汇编指令
- C函数的反汇编代码
- ARM-Thumb过程调用标准
- 中断处理过程
- 栈与堆的使用
-
调试技术
-
栈回溯技术
- 原理
-
手工实现栈回溯分析
- 在工程里添加代码实现栈回溯半自动分析
- 生成core文件,结合gdb工具实现栈回溯全自动分析:这是Linux下的技术,百问网正在研发在单片机上实现
- 调试实例
-
堆越界访问:slab debug
- 原理
- 在工程里添加代码实现堆的调试
- 调试实例
-
内存泄漏
- 原理
- 改进堆的管理代码,解决内存泄漏问题
- 调试实例
-
watchpoint
- 变量被无故修改时,捕获运行信息
- 变量被读取时,捕获运行信息
- 调试实例
-
手工打桩
- 对于一些程序,无法重新编译程序,没有调试器,怎么办?
- 有些程序,稍微增减代码就崩溃,怎么办?
- 我们修改bin文件里的汇编吗,让它触发异常以打印更多信息,同时不影响程序的运行
-