如何swift 打印函数名出函数名和行数阿

今天跟踪一段开源代码的时候,因为对代码不太熟悉,所以要打印一些关键的信息。便顺手整理了一下这个能打印文件名、行号、函数名的宏。
1、打印文件名、行号、函数的两种方式
2、在项目中使用
这段代码中用到了这几个宏:
  1)&__VA_ARGS__&& 是一个可变参数的宏,这个可宏是新的C99规范中新增的,目前似乎gcc和VC6.0之后的都支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的&,&去掉的作用。
  2)&__FILE__&&& 宏在预编译时会替换成当前的源文件名
  3)&__LINE__&& 宏在预编译时会替换成当前的行号
  4)&__FUNCTION__&& 宏在预编译时会替换成当前的函数名称
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:57620次
排名:千里之外
原创:15篇
转载:126篇
评论:10条
(3)(3)(1)(1)(5)(3)(4)(2)(18)(8)(7)(11)(4)(10)(5)(3)(1)(1)(2)(1)(1)(3)(10)(7)(1)(1)(5)(8)(3)(5)(4)(5)Q:如何打印当前的函数和行号?
A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如:
NSLog(@&%s:%d obj=%@&, __func__, __LINE__, obj);
其中__func__和__LINE__都是预编译的宏,编译时会分别替换为当前函数和当前行号。
下面是一些常用于打印日志的宏。
宏&& &说明
__func__&& &打印当前函数或方法,c字符串
__LINE__&& &打印当前行号,整数
__FILE__&& &打印当前文件路径,c字符串
__PRETTY_FUNCTION__&& &打印当前函数或方法(在C++中会包含参数类型),c字符串
Q:如何打印一个类名,消息名,当前堆栈信息?
A:你可以使用以下方法在运行时动态获取这些信息。
代码&& &说明
NSStringFromSelector(SEL)&& &获取selector的名字
NSStringFromSelector(_cmd)&& &获取当前方法名
NSStringFromClass([object class])&& &获取object的类名
NSThread callStackSymbols]&& &获取当前线程的栈,是一个NSArry,包含堆栈中所有函数名。
Q:如何将日志打印到一个文件
A:可以使用freopen函数重定向标准输出和标准出错文件。因为printf函数会向标准输出(stdout)打印,而NSLog函数会向标准出错(stderr)打印。重新定向标准输出(stdout)和标准出错(stderr)到一个文件将会使他们打印日志到一个文件中。
freopen(&/tmp/log.txt&, &a+&, stdout);
freopen(&/tmp/log.txt&, &a+&, stderr);
#define NSLog(FORMAT, ...) {/
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];/
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];/
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];/
[dateFormatter setDateFormat:@&HH:mm:ss:SSSSSS&]; /
NSString *str = [dateFormatter stringFromDate:[NSDate date]];/
[dateFormatter release];/
fprintf(stderr,&[--%s--]*[--%s--]*[--%s:%d--]/n&,[str UTF8String], [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__);/
原文地址:/ThankForYou/archive//2681739.html
如何在&td&&/td&添加滚动条
最新教程周点击榜
微信扫一扫查看: 2400|回复: 5
如何将一个表的行数据引用到打印表格中
阅读权限10
在线时间 小时
我想打印个人情况表,人员很多,如图1在表1“姓名”处填写上对应表2中的“姓名”后,在表1自动引用表2中相对应的数据,再将表1打印出来。
11.jpg (40.62 KB, 下载次数: 4)
19:17 上传
22.jpg (46.78 KB, 下载次数: 2)
19:17 上传
,本人菜鸟,求详细公式,谢谢!!!!
(7.22 KB, 下载次数: 35)
19:12 上传
点击文件名下载附件
阅读权限95
在线时间 小时
用&自动形成连续单个证件或表格:自定义版式、自选项目、可有相片、可并排&
这个帖子介绍的功能可以实现你的要求。也许能够解决更多问题。
下载使用后留言啊!
阅读权限95
在线时间 小时
阅读权限20
在线时间 小时
使用公式:=VLOOKUP(B2,Sheet2!A2:H30,2,0)
19:55 上传
点击文件名下载附件
7.56 KB, 下载次数: 84
阅读权限10
在线时间 小时
& & & & & & & &
lhdcxz 发表于
用&自动形成连续单个证件或表格:自定义版式、自选项目、可有相片、可并排&
这个帖子介绍的功能可以实现你 ...
谢谢,自己学习vlookup搞定了,方法就笨了一点
阅读权限10
在线时间 小时
qinzjbank 发表于
使用公式:=VLOOKUP(B2,Sheet2!A2:H30,2,0)
谢谢,搞了,表格我变了一下,
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师3612人阅读
C/C++(33)
&&&&& 在内核调试时,我们需要跟踪函数调用过程,在这时,我们经常会碰到函数指针的情况,那么,我们怎么跟踪到具体的函数处呢?如何打印出函数指针的函数名?
&& & 这里有两种方法。先说比较笨重的方法:
/questions/351134/how-to-get-functions-name-from-functions-pointer-in-c// Define it like this
typedef struct
& char&&&&&&& *dec_
& #ifdef _DEBUG_FUNC
& void&&&&&&& (*action)(char);
// Initialize it like this
func_Struct func[3]= {
#ifdef _DEBUG_FUNC
{&my_Set(char input)&,&my_Set}};
{&my_Get(char input)&,&my_Get}};
{&my_Clr(char input)&,&my_Clr}};
{&my_Set}};
{&my_Get}};
{&my_Clr}};
// And finally you can use it like this
func[0].action( 0x45 );
#ifdef _DEBUG_FUNC
printf(&%s&,func.dec_text);
详细了解printk后,发现还有更简便的方法。
%p:打印裸指针(raw pointer)
%pF可打印函数指针的函数名和偏移地址
%pf只打印函数指针的函数名,不打印偏移地址。
printk(&%pf&,func[0]-&action); 结果:
%pM打印冒号分隔的MAC地址
%pm打印MAC地址的16进制无分隔
printk(&%pM %pm\n&, mac, mac) willprint:
2c:00:1d:00:1b:00 2c001d001b00
%I4打印无前导0的IPv4地址,%i4打印冒号分隔的IPv4地址
%I6打印无前导0的IPv6地址,%i6打印冒号分隔的IPv6地址
printk(&%pI4 %pi4\n&, ip, ip) will print:
127.0.0.1 127:0:0:1
其它的特殊格式字符参见
http://lxr.linux.no/#linux+v2.6.34/lib/vsprintf.c#L930
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:199314次
积分:2719
积分:2719
排名:第11336名
原创:59篇
转载:102篇
评论:18条
(1)(1)(4)(5)(5)(11)(2)(18)(9)(4)(2)(1)(13)(2)(12)(8)(1)(5)(2)(3)(1)(1)(12)(30)(4)(3)(1)

我要回帖

更多关于 golang 打印函数名 的文章

 

随机推荐