重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4473|回复: 8
打印 上一主题 下一主题

调试小技巧

[复制链接]

20

主题

74

帖子

382

积分

学生管理组

Rank: 8Rank: 8

积分
382
跳转到指定楼层
楼主
发表于 2016-10-12 18:29:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近调试公司的代码,但由于代码量巨大不方便使用gdb直接调试,所以采取用日志来记录记录代码中关键地方的执行状态,例如空指针异常、返回值异常等。具体的操作就是实现类printf形式的格式化输出,将错误信息记录到日志文件中或者通过terminal输出。受这个的启发,突然想到,我们在学校进行代码调试的时候基本都是直接使用jlink这样的方式进行在线仿真,通过下断点查看变量、寄存器的值,基本都不会使用一些额外的调试方法。所以有些同学在接小项目做的时候就会遇到这样的情况,明明自己都调试通过了,但是东西给“客户”后出了问题却不知道问题出在哪。
解决上述问题的最好方法就是加日志,可以通过两种方式:
1.重定向printf函数,通过串口输出调试信息。然后使用printf("func:%s, line:%d, debug_information:",__func__, __LINE__)这样的方式将关键信息打印出来,func代表函数名,line为该printf在该源文件中的行数;
2.使用sprintf函数,将调试信息格式化输出到buffer中,再将buffer中的数据保存到存储介质中(flash,sd卡)。使用示例:sprintf( buffer,"func:%s, line:%d, debug_information:",__func__, __LINE__);

方法就是这样,没有什么技术含量,但是这种方法却能提高效率。第一方式适合于bug的出现有规律情况,可以进行bug的复现,在复现过程中直接看串口的打印信息定位问题;方法二适合于bug的出现没有规律可循,不好复现的情况,则可采取将日志文件记录到存储介质中(ps;单片机上面采用这个方式,难度有点大,若要存到sd卡中的话,移植过文件系统的都知道是什么情况)。
介绍完毕。没看懂的话,留言讨论
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

20

主题

74

帖子

382

积分

学生管理组

Rank: 8Rank: 8

积分
382
沙发
 楼主| 发表于 2016-10-12 18:31:48 | 只看该作者
软件仿真效果

111.png (58.5 KB, 下载次数: 835)

111.png
回复 支持 反对

使用道具 举报

12

主题

130

帖子

470

积分

版主

Rank: 7Rank: 7Rank: 7

积分
470
板凳
发表于 2016-10-12 19:00:13 | 只看该作者
666.顾老师
回复

使用道具 举报

12

主题

130

帖子

470

积分

版主

Rank: 7Rank: 7Rank: 7

积分
470
地板
发表于 2016-10-12 19:00:17 | 只看该作者
666.顾老师
回复

使用道具 举报

287

主题

668

帖子

5641

积分

学生管理组

Rank: 8Rank: 8

积分
5641
5#
发表于 2016-10-12 23:02:13 | 只看该作者
可以可以  顾老师V587
回复 支持 反对

使用道具 举报

287

主题

668

帖子

5641

积分

学生管理组

Rank: 8Rank: 8

积分
5641
6#
发表于 2016-10-12 23:59:14 | 只看该作者
__func__ 是啥子?两边加了下划线的是啥子意思?
__LINE__ 这个行数的信息是啷个获取的?
回复 支持 反对

使用道具 举报

20

主题

74

帖子

382

积分

学生管理组

Rank: 8Rank: 8

积分
382
7#
 楼主| 发表于 2016-10-15 20:31:39 | 只看该作者
李维强-15级 发表于 2016-10-12 23:59
__func__ 是啥子?两边加了下划线的是啥子意思?
__LINE__ 这个行数的信息是啷个获取的?

系统提供的,__func__获取该printf所在函数的函数名,返回一个字符串;__line__获取该printf所在源文件中的行号,返回一个整型数据
回复 支持 反对

使用道具 举报

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
8#
发表于 2016-10-24 15:56:00 | 只看该作者
本帖最后由 程浥 于 2016-10-24 16:49 编辑

看顾老师打印的信息比较NB
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
9#
发表于 2016-10-25 10:41:58 | 只看该作者
printf输出简单方便
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-5-5 20:38 , Processed in 0.170608 second(s), 33 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表