六石编程学:方便调试输出的标准C代码
以为好像发过,没找到。所以重新写一下。技术说明:
- LOG系列是纯输出
- DEBUG/FILE系列除了输出,还写入到文件
某些情况下输出看不到,或者不方便看,写入文件就是首选。
- 具体用法
比如你要判断某个函数有没有走到,来一句LOG_HERE();,编译后再测试,就可以看到输出。非常的方便。
也可以改进一下,增加时间信息。
- 具体代码
#ifndef FT_TS_LOG_FILE_NAME#if defined(_WINDOWS) || defined(WIN32)
#define __FUNC__ __FUNCTION__
#define FT_TS_LOG_FILE_NAME "D:\\tsfreetype.log"
#else
#define __FUNC__ __func__
#define FT_TS_LOG_FILE_NAME "/tmp/tsfreetype.log"
#endif#define LOG_TEXT_ONLY(FMT, ...) char log_text[4096] = {0}; \sprintf(log_text, "%s-%d:" FMT "\n", __FUNC__, __LINE__, ##__VA_ARGS__); \printf("%s", log_text); #define LOG_TO_OUTPUT(FMT, ...) {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__)}#define LOG_FORMAT(FMT, ...) LOG_TO_OUTPUT(FMT, ##__VA_ARGS__)
#define LOG_TEXT(text) LOG_TO_OUTPUT("%s", text)
#define LOG_FLOAT(value) LOG_TO_OUTPUT("%f", value)
#define LOG_INT(value) LOG_TO_OUTPUT("%d", value)
#define LOG_HERE() LOG_TO_OUTPUT("");#define LOG_TO_FILE(FMT, ...) {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__) \{FILE* log_fp = fopen(FT_TS_LOG_FILE_NAME, "a+"); \fwrite(log_text, 1, strlen(log_text), log_fp); fclose(log_fp);}}#define DEBUG_FORMAT(FMT, ...) LOG_TO_FILE(FMT, ##__VA_ARGS__)
#define DEBUG_TEXT(text) LOG_TO_FILE("%s", text)
#define DEBUG_FLOAT(value) LOG_TO_FILE("%f", value)
#define DEBUG_INT(value) LOG_TO_FILE("%d", value)
#define DEBUG_HERE() LOG_TO_FILE("");#define FILE_FORMAT DEBUG_FORMAT
#define FILE_TEXT DEBUG_TEXT
#define FILE_FLOAT DEBUG_FLOAT
#define FILE_INT DEBUG_INT
#define FILE_HERE DEBUG_HERE#endif
六石编程学:方便调试输出的标准C代码相关推荐
- 六石编程学:比垃圾软件更差更可怕的致命软件、剧毒软件
我们如果认为某个软件太差,一般称之为垃圾软件.一般的,垃圾软件就是指最差的那一批.近来,吾感觉这个想法是有问题的. 前几天,有人在群里说,重运算后,结果不同.也没人当回事.吾是惊出冷汗(其实也没有,因 ...
- 六石编程学:抄代码是个技术活,大多数人不传抄
泰山JDK8完善了TTC类型的字体文件支持.自然的相关代码也进行了相应修改.吾全部重写了泰山OFFICE字体相关代码:删除了大多数代码,重新设计了流程.因为吾是在自己的实验平台上处理的,所以要求跟进. ...
- java2实验手册求方程的根_完成实验手册实验六:P101编程题2、3、4 Java程序设计上机实验手册(完稿)_吴娜炯.pdf_学小易找答案...
[简答题]将一个文件的内容装换为大写,显示出来,并把内容复制到文件中去. [简答题]什么是自主访问控制?什么是强制访问控制? 什么是基于角色的访问控制? [简答题]根据第五课教学视频,实现可视化日历. ...
- qdebug 调试 输出乱码_Python里三个最高逼格的调试神器
调试是开发过程中不可避免的一个环节,在Python中我们使用print.logging.assert等方法进行调试既简单又实用,但毕竟有其局限性.今天这篇文章为大家带来三个工具,其中有Python的内 ...
- 通过游戏编程学Python(1)— 猜数字
通过游戏编程学Python 通过游戏编程学Python(1)- 猜数字 文章目录 通过游戏编程学Python 前言 一.知识点 二.第一个游戏 -- 猜数字 1. 玩法简介 2. 游戏流程 三.程序代 ...
- CSDN 第六期编程竞赛做题记录
CSDN 第六期编程竞赛做题记录 -- CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 9.18周日闲来无视写一下 csdn 的编程题,每期编程 ...
- Python123第六周编程题
Python123中第六周编程题 1.获得用户输入的一个整数N,输出N中所出现不同数字的和. ...
- 《少年编程反汇编逆向调试入门》录制成功
少年编程反汇编逆向调试入门 编程要从娃娃抓起,邕城少年编程在行动 让我们一起来编程 手把手教你逆向编程,传授最先进的逆向调试技术,逆向分析系统化工程化,逆向编程不是梦. 李炎 2005年开始反汇编逆向 ...
- ITECH IT63XX/ IT90XX系列可编程直流电源RS-232调试记录
ITECH IT63XX/ IT90XX系列可编程直流电源RS-232调试记录 ITECH IT63XX/ IT90XX是由艾德克斯电子有限公司产品. 本次记录设计PC上位机通过RS-232控制程控电 ...
- 通过游戏编程学Python(4)— 猜成语(上)
通过游戏编程学Python 通过游戏编程学Python(3)- 赌大小 通过游戏编程学Python(2)- 脑筋急转弯 通过游戏编程学Python(1)- 猜数字 文章目录 通过游戏编程学Python ...
最新文章
- XtraBackup
- 使用PL/SQL Developer远程连接到oracle11g
- 微信企业号OAuth2.0授权-Java
- 在家学习的核心就是专注
- C/C++02: Josephus问题
- 百战java课程_java百战程序员SpringBoot视频教程
- ActivityMQ入门案例
- 微PE系统盘制作 / 重装系统
- 《大型网站技术架构》学习笔记
- CATIA软件基础操作及知识工程
- 【高等数学】微积分----教你如何简单地推导求导公式(二)
- html传参,css接受?What 弄啥嘞?
- zTree简单暴力修改图标样式
- 杂散干扰解决办法_F频段干扰问题的几种解决方案
- 联想拯救者R7000P2021安装Ubuntu双系统
- QQ9.0需要安装两个插件
- 安安猜价格聪明机器人_2021年智慧树APP不动产估价第八单元章节测试答案
- 110款表白网站源码,搭建表白网站必备,总有一款适合你
- redis之地理位置
- 什么是“反射”和“内省”?
热门文章
- 【图论】用匈牙利算法找女朋友(纯爱党的大胜利)
- linux执行hadoop程序,gcc编译和运行hadoop c api程序
- CSDN博客停用公告
- ASP.NET连接数据库实现登录和注册
- html怎么读取2进制视频,IE 中如何读取二进制文件的内容?
- java环境一键配置下载地址_java环境一键配置-java环境一键配置下载 v1.0免费版-下载啦...
- 通讯工程考研考计算机专业跨度大么,通信工程专业,与自动化专业差别大吗?考研可以跨考吗?...
- php json替换,php解决json中中文部分被替换为unicode编码
- 微信小程序sass不编译怎么办_不吹牛,四款免费实用的微信小程序,打开立即使用!...
- 用 IIS 进行ASP.NET 成员/角色管理(1):安全和配置概述