最近在看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

动态调试pr_debug相关推荐

  1. 安卓APP动态调试-IDA实用攻略

    0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...

  2. 如何动态调试Python的第三方库

    如何动态调试Python的第三方库 2017年01月21日 22:53:57 阅读数:1834 注意:本文方法仅限于调试安装时附带py源码的库,如sklearn. 引入 用sklearn中的sklea ...

  3. IDA动态调试技术及Dump内存

    IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...

  4. CLR探索系列:Windbg+SOS动态调试分析托管代码

    http://blog.csdn.net/garyye/article/details/4788070   在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心.譬如查看一个托管堆或者计 ...

  5. vc2010中开始执行不调试灰的_反编译动态调试smali全过程

    点击上方蓝字关注我,每天进步一点点 大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑.网络抓包.数据来源流向分析.页面逻辑跳转分析.动态调试等.由于很多代码都会混淆,很多时候我们直接通过代码可能 ...

  6. 修改so_新手向总结:IDA动态调试So的一些坑

    本文为看雪论坛优秀文章 看雪论坛作者ID:nisodaisuki 目录 动态调试步骤 复制`android_server`到设备中,并执行. 用`pm`确定要调试apk的包名 用`am`启动被调试应用 ...

  7. Java 动态调试技术原理及实践

    调试是发现和减少计算机程序或电子仪器设备中程序错误的一个过程.最常用的断点调试技术会在断点位置停顿,导致应用停止响应.本文将介绍一种Java动态调试技术,希望能对大家有帮助.同时也欢迎读者朋友们一起交 ...

  8. AndroidStudio动态调试smali

    本文部分参考至吾爱破解https://www.52pojie.cn/thread-658865-1-1.html 1.环境与工具 AndroidStudio V3.2beta1 smaliidea-- ...

  9. 2020-10-25(动态调试SMC代码)

    今日总结 这是昨天的动态调试图,那一段加密的代码,rax和rdx 里面记录了一个关于flag的数组. 刘佬跟我说,只需要ida静态调试的时候插入一个python脚本,在600B0B的地址 执行一次异或 ...

最新文章

  1. 优秀的程序员都在哪里 如何寻找优秀的程序员?
  2. 26个要素,仅仅依靠百度打造成功网站
  3. C4D立体素材|旅游度假主题海报,设计点睛之笔
  4. C#中获去一个字符串中的汉字的个数 C#获取字符串全角的个数
  5. MacOS磁盘工具:如何将“校验和..“添加到磁盘映像
  6. 模拟电路---利用反相器构成方波电路在实际电路中的使用
  7. python中的MRO
  8. UltraLAB台式图形工作站(并行计算高效王~高性能计算工作站EX620i介绍)
  9. 第二工业大学计算机应用大专录取分,二工大|2019年上海第二工业大学专科层次依法自主招生各专业最低录取分数线...
  10. 方面级情感分析论文阅读《A Survey on Aspect-Based Sentiment Analysis: Tasks, Methods, and Challenges》
  11. overflow:auto
  12. 客户端访问https时应无浏览器(含终端)安全警告信息;_(多图)老弟,你连HTTPS 原理都不懂,还给我讲“中间人攻击”,逗我吗......
  13. 小波变换的matlab实现,维小波变换MATLAB实现
  14. 深入理解Mysql事务ACID特性以及事务隔离级别
  15. MapGuide空间参考系API
  16. 开学网络舆情信息搜集方法与技术工具详解
  17. 潜规则------中国历史中的真实游戏 吴思
  18. 引用程序集没有强名称的解决办法
  19. 前端知识——css 之预处理器 less 语法
  20. 2009年“中国安防10大品牌”榜

热门文章

  1. 【计算理论】图灵机 ( 图灵机示例 )
  2. Linux命令+shell脚本大全:操作文件系统
  3. docker运行分布式搜索引擎ES容器max virtual memory areas vm.max_map_count [65530] is too low, increase to at leas
  4. 我的学习node.js心得(一)
  5. iphone一键转移_iPhone 12换机首选,QQ同步助手一键智能备份迁移
  6. JS高级程序设计读书笔记 (第九章 客户端检测)
  7. 用Python实现地理信息出图(含比例尺、指北针、图例)
  8. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制
  9. SM2RAIN-ASCAT全球规模降雨产品数据集(2007年-2020年6月)
  10. 管理学定律五:二八定律与木桶理论