動態除錯pr debug

2021-07-07 09:33:40 字數 3113 閱讀 9933

最近在看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' >/dynamic_debug/control

是debugfs的掛載點,筆者的掛載點是:/sys/kernel/debug

同時需要更改日誌列印級別使得debug訊息可以在控制台輸出,echo 8 > /proc/sys/kernel/printk (僅僅用dmesg檢視列印資訊,不需要調節列印級別)

如果cat /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除錯資訊

2014年09月05日 綜合 共 2396字 字型大小 小 中 大 如何開啟pr debug除錯資訊 以dma的除錯為例,先來看看乙個pr debug函式呼叫 pr debug s s s n func chan success fail chan dma chan name chan null 在...

如何開啟pr debug除錯資訊

以dma的除錯為例,先來看看乙個pr debug函式呼叫 pr debug s s s n func chan success fail chan dma chan name chan null 在include linux printk.h裡找到pr debug的定義 if you are wri...

如何開啟pr debug除錯資訊

from 如何開啟pr debug除錯資訊,先不要著急,我們先靜下心來分析一下這個函式的源 以dma的除錯為例,先來看看乙個pr debug函式呼叫 plain view plain copy pr debug s s s n func chan success fail chan dma chan...