免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4886 | 回复: 10
打印 上一主题 下一主题

linux下调试信息输出办法,不是很懂,谁来解释一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-11 20:10 |只看该作者 |倒序浏览
#ifdef MY_DEBUG
#define DPRINTK(fmt, args...) printk(KERN_INFO "MyFile: "fmt, ## args)
#else
#define DPRINTK(fmt, args...)
#endif
#define DPRINTK_ERR(fmt, args...) printk(KERN_EMERG "KernelOperFile error: "fmt, ## args)

谁能解释一下,小弟不才,不是很懂

论坛徽章:
0
2 [报告]
发表于 2007-07-11 20:20 |只看该作者
## 是将 两个参数 连接成一个字符串.. 如 DPRINTK(a,b)就替换成
printk(.."MyFile: ""ab") 两个字符串常量中间只有whitespace的话,可以看作一个字符串常量的..
The C programming language 上面有解释的..

论坛徽章:
0
3 [报告]
发表于 2007-07-11 20:24 |只看该作者
谢谢楼上!
这种东西在写程序的时候怎么用呢??

论坛徽章:
0
4 [报告]
发表于 2007-07-11 20:32 |只看该作者
原帖由 Jass 于 2007-7-11 20:24 发表
谢谢楼上!
这种东西在写程序的时候怎么用呢??

DPRINTK("HAHA %s %d\n", "ABCDE", 12345);
DPRINTK_ERR("HAHA %s %d\n", "ABCDE", 12345);
跟printf用法一样

论坛徽章:
0
5 [报告]
发表于 2007-07-11 20:38 |只看该作者
原帖由 galaxywar 于 2007-7-11 20:32 发表

DPRINTK("HAHA %s %d\n", "ABCDE", 12345);
DPRINTK_ERR("HAHA %s %d\n", "ABCDE", 12345);
跟printf用法一样


那么
     #define DPRINTK(fmt, args...) printk(KERN_INFO "MyFile: "fmt, ## args)
   #define DPRINTK_ERR(fmt, args...) printk(KERN_EMERG "KernelOperFile error: "fmt, ## args)

不就可以了吗?为什么要先#define MY_DEBUG?这个是做什么用的?
还有#else
     #define DPRINTK(fmt, args...)


这个else后面的define又干了什么呢?

论坛徽章:
0
6 [报告]
发表于 2007-07-11 20:42 |只看该作者
原帖由 Jass 于 2007-7-11 20:38 发表


那么
     #define DPRINTK(fmt, args...) printk(KERN_INFO "MyFile: "fmt, ## args)
   #define DPRINTK_ERR(fmt, args...) printk(KERN_EMERG "KernelOperFile error: "fmt, ## args)

不就可以了吗 ...

MY_DEBUG是个开关, 如果在makefile里或代码里定义了它, 调用这个宏的时候就会采用前一项,也就是输出前带一个"MyFile:", 否则不加前缀

纠正一下,那个是ifdef, 不是define

论坛徽章:
0
7 [报告]
发表于 2007-07-11 21:29 |只看该作者
好,多谢

论坛徽章:
0
8 [报告]
发表于 2007-07-11 21:51 |只看该作者
对了,printk需要什么头文件?
ps:怎样查到某个函数需要的头文件?

论坛徽章:
0
9 [报告]
发表于 2007-07-11 23:02 |只看该作者
原帖由 Jass 于 2007-7-11 21:51 发表
对了,printk需要什么头文件?
ps:怎样查到某个函数需要的头文件?

man function

论坛徽章:
0
10 [报告]
发表于 2007-07-11 23:12 |只看该作者
原帖由 redhat008 于 2007-7-11 20:20 发表
## 是将 两个参数 连接成一个字符串.. 如 DPRINTK(a,b)就替换成
printk(.."MyFile: ""ab") 两个字符串常量中间只有whitespace的话,可以看作一个字符串常量的..
The C programming language 上面有解释的..

确定?
我怎么记得这是gcc的扩展,用于可变参数宏.
看看
#define DPRINTK(fmt, args...) printk(KERN_INFO "MyFile: "fmt, ## args)
#define DPRINTK(fmt, args...) printk(KERN_INFO "MyFile: "fmt, args)

在DPRINTK("hello")时的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP