[C语言]函数与调试
函数与调试
正常程序的调试使用gdb。但有时也会在程序中通过使用printf(),打印关键信息进行bug定位及调试。接下来通过实践不断优化改善:
1,通过在程序中直接使用printf()函数进行开发调试。但在开发调试测试结束后,必须删除相应的调试打印函数(printf)。因为过多的打印函数存在会影响效率,所以上线时会删掉调试打印函数。但这样就导致了生成程序出现bug需测试环境调试定位时,又得重新书写printf进行打印调试。
2,通过使用DEBUG来控制printf函数的调用使用如下:
void test( void )
{/* do something */
#ifdef DEBUGprintf("Tets Debug\n");
#endif/* do something */
}
若想打印出printf信息,只要在编译时加入DEBUG选项即可。使用如下:gcc -DDEBUG main.c
此时虽然在DEBUG是已经满足要求,需要调试时才会执行。更不会影响生产线的执行效率。但过多的#ifdef和#endif嵌套会影响代码风格,且会影响可读性。故有了下一版本。
3,使用宏处理。
定义个DEBUG_WRITE宏,在调试状态时指向write_debug函数;非调试状态DEBUG_WRITE定义变成了(void)。
使用stderr而不是stdout的原因是:stderr不存在缓存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>#ifdef DEBUG
#define WRITE_DEBUG( arg ) write_debug arg
#else
#define WRITE_DEBUG( arg )
#endif/**
* @brief debug日志信息打印函数
*
* @param fmt
*/
void
write_debug( char *fmt, ... )
{va_list vl;va_start( vl, fmt );vfprintf( stderr, fmt, vl );va_end( vl );
}int
main( int argc, char *argv[] )
{int num = 10;char *str = "szyu";/* 使用时里面的括号不能省略 */WRITE_DEBUG( ( "num...%d, str...%s\n", num, str ) );return 0;
}
较之前版本,风格统一且不影响可读性。
本文参考自《征服C指针》
转载于:https://blog.51cto.com/11998200/1861287
[C语言]函数与调试相关推荐
- 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 脑动力:C语言函数速查效率手册(附DVD光盘1张) [平
脑动力:C语言函数速查效率手册(附DVD光盘1张) [平 本书全面.系统地介绍了C语言的库函数.C语言是基础的通用程序设计语言,许多语言都是从C语言基础上发展起来的,C语言库函数可以使编程更加高效便捷 ...
- 利用反汇编手段解析C语言函数
利用反汇编手段解析C语言函数 通过在 Visual C++6.0 下反汇编一个 32 位 C语言程序的部分代码来解析解释函数调用的具体过程. 函数调用过程 函数调用过程主要由参数传递.地址跳转.局部变 ...
- C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...
C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质 事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结 ...
- C语言 函数不定长参数 ##__VA_ARGS__经典案例 - C语言零基础入门教程
目录 一.##__VA_ARGS__简介 二.##__VA_ARGS__经典案例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.## ...
- C语言函数一章教学,C语言-第1章教学案.doc
C语言-第1章教学案 第一章 前言 本章重点 1.了解C语言的产生.发展.特点:::1.了解C语言的产生.发展.特点:2.掌握C语言的基本结构:3.掌握C语言源程序的调试运行过程:第一3.C语言的产生 ...
- 第05章 Go语言函数(Go语言func)
函数是组织好的.可重复使用的.用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率. Go 语言支持普通函数.匿名函数和闭包,从设计上对函数进行了优化和改进,让函数使用起来更加方 ...
- Linux(Ubuntu)下C语言编译与调试
Linux(Ubuntu)下C语言编译与调试 编译流程 gcc安装命令 sudo apt install build-essential vim/touch 创建源文件 vim打开编辑源文件(.c结尾 ...
- C语言函数大全-- l 开头的函数
C语言函数大全 本篇介绍C语言函数大全-- l 开头的函数 1. labs,llabs 1.1 函数说明 函数声明 函数功能 long labs(long n); 计算长整型的绝对值 long lon ...
最新文章
- 使用MVVM绑定AppBar事件
- 第11章 支撑向量机SVM
- 宏观经济之国家经济与建设
- python安装多少位_python安装流程
- 30多门免费课程上线,亚马逊“机器学习大学”开学了
- Jquery的load加载本地文件出现跨域错误的解决方案
- java 代码走查_代码走查检查表(JAVA).doc
- M2Det 论文笔记
- IBM x3850 x5U盘启动或光驱启动不起作用
- 日文翻译器支持整篇文档批量翻译
- 天涯百宝箱功能的js脚本--只看楼主
- PHP项目汇报ppt模板,免费工作汇报模板(课堂PPT)
- 上海社保基数又上涨,对积分、落户有什么影响?
- 软件里的alpha版和beta版是什么意思?
- 各种说明方法的例句_句子的说明方法有哪些(说明方法的句子大全集)
- 速读原著-TCP/IP(子网寻址)
- 三菱Q系列PLC数据采集随笔
- Flask框架初学-03-模板
- 车联网中密码技术的探究
- nginx反向代理,隐藏服务IP