1.
2.
3.
4.
5.
6.
7.
8.
9. void print_function_addr(int ebp, int level) { int* start; int index; if(0 == ebp || 0 == level) return; start = (int*)ebp; index = 0;
10. while(index < level){
11. printf("[%d] 0x%08x\n", index, start[1]);
12. index ++;
13. start = (int*)start[0];
14. }
15. }
(5)日志和计数器
依靠系统本身的调试软件当然是不够的,所以为了看清数据的运行流程,我们还需要获得一些额外的调试信息了。所以,对于业务而言,我们需要按照告警、错误、数据格式分别进行日志保存。当然,有时候我们还要对业务性能、频率进行衡量和比较,所以很多时候计数器也是必不可少的。这些信息都是正常代码之外的额外信息,所以处理好他们和普通代码之间的关系也是一门大学问。同时,日志有时还要受到多线程、效率、异常等因素的影响,所以思考和执行的时候一定要顾虑周全。
(6)调试原则
这些调试原则只是我个人的一些经验总结,谈不上真知灼见,仅供大家参考。1)先排除硬件,后软件。特别高频信号要注意时序和信号完整性;2)软件设计大于调试;3)软件早调试早得益;4)复杂的功能调试可以在仿真软件上进行,比如说全局地址越界等,使用gdb的条件断点调试就十分方便,在嵌入式设备上查找却十分困难;5)尽量自己编写调试函数,不断改进和优化处理,用得也顺手;6)日志模块要健壮,尤其要适合多线程处理;7)定位故障一定要寻找到根本原因,否则极易生成新的故障。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库随想录(软件调试)(2)在线全文阅读。
相关推荐: