动态调试pr_debug

最近在看overlay fs代码时发现里面有些函数里使用pr_debug加了一些打印信息。那么如何打开这个打印信息呢?

首先查看pr_debug的定义:

#if defined(CONFIG_DYNAMIC_DEBUG)
/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
#define pr_debug(fmt, ...) \
         dynamic_pr_debug(fmt, ##__VA_ARGS__)
#elif defined(DEBUG)
#define pr_debug(fmt, ...) \
        printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...) \
        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif

查看/boot下的内核配置文件config-*,可以知道已经定义了CONFIG_DYNAMIC_DEBUG。接下来只要在debugfs 里打开即可:

echo -n 'module overlay +p' ><debugfs>/dynamic_debug/control

<debugfs>是debugfs的挂载点,笔者的挂载点是:/sys/kernel/debug

同时需要更改日志打印级别使得Debug消息可以在控制台输出,echo 8 > /proc/sys/kernel/printk (仅仅用dmesg查看打印信息,不需要调节打印级别)


如果cat <debugfs>/dynamic_debug/control,可以看到内核支持的动态调试点:

...

net/ipv4/netfilter/nf_conntrack_proto_icmp.c:121 [nf_conntrack_ipv4]icmp_new =_ "icmp: can't create new conn with type %u\012"
net/ipv4/netfilter/nf_conntrack_proto_icmp.c:167 [nf_conntrack_ipv4]icmp_error_message =_ "icmp_error_message: no match\012"
net/ipv4/netfilter/nf_conntrack_proto_icmp.c:159 [nf_conntrack_ipv4]icmp_error_message =_ "icmp_error_message: no match\012"
net/ipv4/netfilter/nf_conntrack_proto_icmp.c:148 [nf_conntrack_ipv4]icmp_error_message =_ "icmp_error_message: failed to get tuple\012"
net/ipv4/netfilter/ipt_MASQUERADE.c:41 [ipt_MASQUERADE]masquerade_tg_check =_ "bad rangesize %u\012"
net/ipv4/netfilter/ipt_MASQUERADE.c:37 [ipt_MASQUERADE]masquerade_tg_check =_ "bad MAP_IPS.\012"
/root/overlayfs/overlayfs.h:130 [overlay]ovl_do_whiteout =_ "whiteout(%pd2) = %i\012"
/root/overlayfs/overlayfs.h:105 [overlay]ovl_do_removexattr =_ "removexattr(%pd2, \042%s\042) = %i\012"
/root/overlayfs/overlayfs.h:122 [overlay]ovl_do_rename =_ "...rename2(%pd2, %pd2, ...) = %i\012"
/root/overlayfs/overlayfs.h:116 [overlay]ovl_do_rename =_ "rename2(%pd2, %pd2, 0x%x)\012"
/root/overlayfs/overlayfs.h:98 [overlay]ovl_do_setxattr =_ "setxattr(%pd2, \042%s\042, \042%*s\042, 0x%x) = %i\012"
/root/overlayfs/overlayfs.h:89 [overlay]ovl_do_symlink =_ "symlink(\042%s\042, %pd2) = %i\012"
/root/overlayfs/overlayfs.h:79 [overlay]ovl_do_mknod =_ "mknod(%pd2, 0%o, 0%o) = %i\012"
/root/overlayfs/overlayfs.h:69 [overlay]ovl_do_mkdir =_ "mkdir(%pd2, 0%o) = %i\012"
/root/overlayfs/overlayfs.h:60 [overlay]ovl_do_create =_ "create(%pd2, 0%o) = %i\012"
/root/overlayfs/overlayfs.h:50 [overlay]ovl_do_link =_ "link(%pd2, %pd2) = %i\012"
/root/overlayfs/overlayfs.h:40 [overlay]ovl_do_unlink =_ "unlink(%pd2) = %i\012"
/root/overlayfs/overlayfs.h:33 [overlay]ovl_do_rmdir =_ "rmdir(%pd2) = %i\012"
/root/overlayfs/overlayfs.h:122 [overlay]ovl_do_rename =_ "...rename2(%pd2, %pd2, ...) = %i\012"
/root/overlayfs/overlayfs.h:116 [overlay]ovl_do_rename =_ "rename2(%pd2, %pd2, 0x%x)\012"

打印点可以更详细的控制,如只打开某个文件的某一行的打印,详细的使用见Linux kernel的Documentation/dynamic-debug-howto.txt

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值