嵌入式 C宏跟踪调试

原创 2013年12月02日 14:45:21
使用一些宏跟踪调试
ANSI标准说明了五个预定义的宏名。它们是:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
C++中还定义了 __cplusplus
如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。
__LINE__ 及 __FILE__宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。
__DATE__ 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。
__TIME__ 宏指令包含程序编译的时间。时间用字符串表示,其形式为: 分:秒
__STDC__ 宏指令的意义是编译时定义的。一般来讲,如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有十进制常量1。如果它含有任何其它数,则实现是非标准的。
__cplusplus 与标准c++一致的编译器把它定义为一个包含至少6为的数值。与标准c++不一致的编译器将使用具有5位或更少的数值。
可以定义宏,例如:
当定义了_DEBUG,输出数据信息和所在文件所在行
#ifdef _DEBUG
#define DEBUGMSG(msg,date)printf(msg);printf(“%d%d%d”,date,_LINE_,_FILE_)
#else
#define DEBUGMSG(msg,date)
#endif
20: 宏定义防止错误使用小括号包含。
例如:
有问题的定义:#define DUMP_WRITE(addr,nr) {memcpy(bufp,addr,nr); bufp +=nr;}
应该使用的定义: #difne DO(a,b) do{a+b;a++;}while(0)
例如:
if(addr)
DUMP_WRITE(addr,nr);
else
do_somethong_else();
宏展开以后变成这样:
if(addr)
{memcpy(bufp,addr,nr); bufp += nr;};
else
do_something_else();
gcc 在碰到else前面的“;”时就认为if语句已经结束,因而后面的else不在if语句中。而采用do{}while(0)的定义,在任何情况下都没有问题。而改为 #difne DO(a,b) do{a+b;a++;}while(0)的定义则在任何情况下都不会出错。

嵌入式系统C语言编程的心得体会(宏应用篇)

在C语言里面宏定义的应用是很灵活的,但是一般讲C语言的书往往并不详细讲述宏的应用,只是简单提一下。 宏的应用是程序模块化,通用化一个重要手段。嵌入式系统做多了就会发现其实没给项目应用的底层函数都十分...
  • chenyi22
  • chenyi22
  • 2013年12月02日 22:35
  • 955

C语言中调试用到的宏定义

在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难。因此在程序中加入合理的打印信息,定位错误出现的文件名,函数名,行号等信息,能更高效的定位到问题的所在。      下面定义了宏...
  • wabil
  • wabil
  • 2017年06月15日 09:18
  • 240

嵌入式软件调试方法

SdustLiYang的专栏 厚积薄发 目录视图摘要视图订阅 CSDN日报20170401 ——《如果你还是“程序员”,我劝你...
  • yz2010
  • yz2010
  • 2017年04月02日 20:17
  • 647

调试技巧——宏定义开关和printf

printf 的宏定义版本 前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序...
  • guanyasu
  • guanyasu
  • 2016年07月09日 15:42
  • 2816

Qt Creator远程调试嵌入式ARM开发板上的Linux程序

Qt自带调试功能,如果是主机上的程序可以直接调试,非常方便。同时,Qt是一个跨平台的编程语言,在主机上调试其他平台上的程序时就需要相应的设置。这种跨平台的调试在嵌入式开发时尤为重要,这里对跨平台的Qt...
  • baidu_31381143
  • baidu_31381143
  • 2016年12月25日 12:05
  • 750

linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用

在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难。因此在程序中加入合理的打印信息,定位错误出现的文件名,函数名,行号等信息,能更高效的定位到问题的所在。      下面定义了宏...
  • edonlii
  • edonlii
  • 2013年01月10日 20:43
  • 7275

嵌入式底层软件开发学习系列之五调试方法

嵌入式开发中难免出现这样或那样的问题, 因而软件的调试手段会直接影响到开发的进度, 本节将总结一些常用的调试方法...
  • wanthelping
  • wanthelping
  • 2015年11月17日 21:26
  • 978

C语言代码跟踪调试

原文:http://blog.csdn.net/zhijun198811/article/details/17347423
  • young45
  • young45
  • 2014年04月11日 17:19
  • 657

linux C宏定义实现打印调试信息

本文仅实现了三种宏定义调试     #define LOG(s)                                   日志显示(文件名:行号}+日志信息     #define E...
  • u013457167
  • u013457167
  • 2016年02月28日 13:56
  • 2114

C实战:强大的程序调试工具GDB

C实战:强大的程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。1.2 添加断点b f...
  • dc_726
  • dc_726
  • 2015年06月12日 21:21
  • 4296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 C宏跟踪调试
举报原因:
原因补充:

(最多只允许输入30个字)