当前位置:  编程技术>c/c++/嵌入式

C语言调试手段:锁定错误的实现方法

    来源: 互联网  发布时间:2014-10-15

    本文导语:  在项目开发工程中,如果能确定哪个文件下的哪个函数下的哪行出错--即锁定错误,那该多好啊,该文章就是为此而作的。首先来了解一下文件默认的输出信息的函数吧:文件信息函数: 代码如下:printf("line : %dn", __LINE__);   ...

在项目开发工程中,如果能确定哪个文件下的哪个函数下的哪行出错--即锁定错误,那该多好啊,该文章就是为此而作的。
首先来了解一下文件默认的输出信息的函数吧:
文件信息函数:
代码如下:

printf("line : %dn", __LINE__);                   //当前行数
printf("filename : %sn", __FILE__);             //当前文件名
printf("function : %sn", __FUNCTION__);  //当前函数
printf("time : %sn", __TIME__);                  //当前时间
printf ("date : %sn",  __DATE__);              //当前日期
输出:
line : 10
filename : test.c
function : main.c
time : 14:13:51
date : Oct 13 2012

理论已足,那就来看看如何锁定错误吧:
一、源文件:
代码如下:

[root@localhost for_test]# cat erroutput.c
#include
#include
#define _DEBUG(msg...)    printf("[ %s,%s, %d ]=>",__FILE__, __FUNCTION__, __LINE__);  printf(msg);printf("rn")
#define _ERROR(msg...)    printf("[ error: %s, %d]=>", __FILE__,  __LINE__);printf(msg); printf("rn")
#define _ASSERT(exp)     
                        do {
                                if (!(exp)) {
                                printf( "[ %s ]  ",#exp);printf("rn");
                                assert(exp);
                                }
                        } while (0)
int main(void)
{
        char *p = NULL;
        _DEBUG("DEBUG!");
        _ERROR("ERROR!");
        _ASSERT(NULL != p);
        return 0;
}

二、输出:
代码如下:

[root@localhost for_test]# gcc erroutput.c
[root@localhost for_test]# ./a.out
[ erroutput.c,main, 17 ]=>DEBUG!
[ error: erroutput.c, 18]=>ERROR!
[ NULL != p ]
a.out: erroutput.c:19: main: Assertion `((void *)0) != p' failed.
已放弃

TI处理:
代码如下:

#ifdef DEBUG
    #define DBG(fmt, args...)  printf("Debug " fmt, ##args)// ##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。
#else
    #define DBG(fmt, args...)
#endif
#define ERR(fmt, args...)  printf("Error " fmt, ##args)
[root@localhost for_test]# cat debug_err.c
#include
//#define DEBUG
int main(void)
{
       DBG("xxxxn");
       ERR("xxxxn");
       return 0;
}
[root@localhost for_test]# ./a.out
Error xxxx

#ifdef __DEBUG
    #define DBG(fmt, args...) fprintf(stderr,"Encode Debug: " fmt, ## args)
#else
    #define DBG(fmt, args...)
#endif
#define ERR(fmt, args...) fprintf(stderr,"Encode Error: " fmt, ## args)


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • C语言中间语言 CIL
  • PHP编程语言介绍及安装测试方法
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • java开发知识 iis7站长之家
  • c语言实现MD5算法完整代码示例
  • C语言如何改变当前语言环境
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 如何在VIM中使汇编语言和C语言自动缩进?
  • c语言基于libpcap实现一个抓包程序过程
  • 我安装的linux时默认语言选择的是中文,又乱码,怎么可以解决?怎么更改默认语言成英文?
  • HTML超文本标记语言教程及实例
  • Redhat9安装时语言只选择了中文,现在还能再增加其它语言的支持吗?如英文
  • MD5算法的C语言实现
  • 请问哪里有ubuntu 9.0版本的中文语言包和KDE的中文语言包下载,我用Google搜索了很多地方都没有!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3