SED代码调试大法

简介:

        SED代码调试法,使用LINUX命令sed, 在函数首部添加函数名打印打印,以方便了解代码运行流程。 目前我所发布的sed的正则表达式仅适用于C语言代码。

命令:

        1.   添加函数名打印

        命令中的“pr_err” 是打印函数, 可以替换。

ls *.c | xargs sed -i '/)$/{n;s/^{/&\n\tpr_err("%s:in %d.\\n",__func__,__LINE__);/}; /)[[:blank:]]*{$/{s/^[^[:blank:]].*/&\n\tpr_err("%s:in %d.\\n",__func__,__LINE__);/}'

        2.  无__func__,添加函数名打印

        某些编译器不支持__func__功能,则可以使用以下命令。

sed '/^[^/].*)$/{N;s/\(^[^[:blank:]]\+.*(.*)\)[[:blank:][:space:]]*{$/&printf("\1\\n");/}' *.c -i

        3. 打印switch里的所有case

        

ls *.c | xargs sed 's/[[:blank:]]\+\bcase\b\(.*\):/&\n\tpr_err("in \1\\n");/' -i

            打印case指定行号, 1919至2153, 这两个行号可以替换。

sed '1919,2153{s/^[[:blank:]]\+\bcase\b\(.*\)/&\n\tprintf("in \1\\n");/}' *.c -i

       打印switch里的default。

ls *.c | xargs sed 's/[[:blank:]]\+\bdefault\b\(.*\):/&\n\tpr_err("in default\\n");/' -i

        4. 打印return出口

ls *.c | xargs sed -i 's/\(\breturn\b[^;]*;\)/{pr_err("%s: out at %d.\\n",__func__, __LINE__);\1}/'  

使用示例:

在uboot的driver/usb/host下执行以下命令:

ls *.c | xargs sed -i '/)$/{n;s/^{/&\n\tpr_err("%s:in %d.\\n",__func__,__LINE__);/}; /)[[:blank:]]*{$/{s/^[^[:blank:]].*/&\n\tpr_err("%s:in %d.\\n",__func__,__LINE__);/}'

重新编译烧录uboot,获得以下打印(截取部分)。

解析:函数名后的数字,是此函数所在的行号。

starting USB...    
usb_init:in 267.    
Bus usb@5311000: ehci_usb_probe:in 84.    
ehci_enable_vbus_supply:in 71.    
ehci_setup_phy:in 1799.                                                                                
ehci_register:in 1727.    
ehci_setup_ops:in 1009.    
ehci_reset:in 188.    
handshake:in 171.    
ehci_common_init:in 1044.    
USB EHCI 1.00    
usb_scan_bus:in 230.    
scanning bus usb@5311000 for devices... usb_scan_device:in 618.    
usb_get_bus:in 772.    
usb_setup_device:in 1232.    
usb_prepare_device:in 1093.    
usb_alloc_device:in 138.                                                                                                                          
usb_setup_descriptor:in 1009.    
get_descriptor_len:in 963.    
usb_get_descriptor:in 580.    
usb_control_msg:in 233.    
submit_control_msg:in 63.    
ehci_submit_control_msg:in 1655.    
usb_get_bus:in 772.    
ehci_submit_root:in 718.    
ehci_get_ctrl:in 116.    
usb_get_bus:in 772.    
usb_select_config:in 1142.    
get_descriptor_len:in 963.    
usb_get_descriptor:in 580.    
usb_control_msg:in 233.    
submit_control_msg:in 63.    
ehci_submit_control_msg:in 1652.    
_ehci_submit_control_msg:in 1219

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值