一、前言 在后台程序运行出问题时,需要查看详尽的日志,C语言提供记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__;先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。 二、ANSI C标准宏 __...
在这个例子中,我们定义了一个print_debug_info函数,它接受一个字符串参数,并将其与当前的行号一起输出,这样,当我们在代码中调用这个函数时,就可以方便地查看调试信息及其所在行号。 归纳一下,通过使用__LINE__宏,我们可以在C语言程序中轻松地获取当前源代码的行号,这对于调试和定位问题非常有用,希望本文能帮助你...
DebugPrintf("编译日期与时间: %s,%s\n", __DATE__,__TIME__); DebugPrintf("当前所在行号:%d\r\n", __LINE__); DebugPrintf("当前源文件名称:%s\r\n", __FILE__); DebugPrintf("当前固件编译日期:%s\r\n", __DATE__); DebugPrintf("当前固件编译时间:%s\r\n", __TIME__); return 0...
1u8 memcpysafe(char*_dest,constchar*_src,size_t _n, size_t _destSizeof)2{3_destSizeof--;4if(_n >_destSizeof)5_n =_destSizeof;67memcpy(_dest,_src,_n);8_dest[_n]=0x0;//增加结束符910debug_msg("数据格式异常");//会将文件名和行号打印出来11return1;12} 二、memset char *bu...
行号和文件名指令 #line__LINE___FILE__c语言把一些重要的环境变量、系统常量,用符号常量的形式进行封装,这样我们只需要使用定义好的宏名,就可以方便的获取系统环境的数据。比如__FILE__就表示当前源文件的绝对文件名(包含绝对路径和完整文件名)。形如”C:\PATH\FILE.EXT”就是绝对文件名,”C:\PATH”就...
//我们知道,一般可以通过__LINE__ 标识日志当前行号位置,但是这里不适用 //可以通过 __builtin_return_address 获取上级调用的退出的地址,可以设置时1级,也可以设置是2级别... // 增加打印调用malloc和free位置的信息。 这里打印地址 通过addr2line进行地址和行号转换 ...
#include<stdio.h>intmain(){printf("当前行号:%d\n",__LINE__);return0;} 在上面的例子中,__LINE__宏被用于输出当前行号到控制台。编译并运行该程序,输出结果为当前行号的值。 1.3__DATE__ 在C语言中,__DATE__是一个特殊的预处理器宏,用于获取当前编译的日期字符串。
然后在菜单栏找到Tools -> customize ->Add-ins and Macro Files ,浏览找到VC6LineNumberAddin.dll将其添加进Add-ins and Macro中并将其选中再点击关闭,重启VC++6.0就可以显示行号了 7 问题4,编译后提示warning C4273: '***'inconsistent dll linkage. dllexport assumed(DLLTExCed不一致),...
为了便于说明,我把行号也显示出来了:17 subq $80, %rsp 这一行为main函数创建函数栈,那些临...
上述代码:ANONYMOUS(static int);最终展开为:static int _anonymous9; // 9表示该行行号;,下面分析下具体的展开过程: 第一次展开:ANONYMOUS(static int); ---> __ANONYMOUS0(static int, __LINE__);; 第二次展开:__ANONYMOUS0(static int, __LINE__); ---> ___ANONYMOUS1(static int, _anonymous...