linux自动添加调试语句脚本

        在平时的调试过程中遇到一些难以解决的问题,这时候就需要进行排查。比如在源码的各个函数中加入一些调试语句,以此查看程序的运行顺序及情况。但是在linux源码中有些.c文件动辄就几千行代码,里面的函数更是数不胜数,如果一个个手动添加打印语句,就会很耗费时间。这明显不是一个很好的选择。于是本文提供了一个基于Perl的脚本,用于在.c文件中的各个函数的开头加入特定的调试语句,以节省调试时间。

add_printf_to_all_func.pl


#!/usr/bin/perl

use strict;
use warnings;

if((scalar @ARGV) < 2)
{
    printf "usage: \n $0 file_name outfile.\n";
    exit  -1;
}

my ($file,$outfile) = @ARGV;
my ($in,$out);

my $add_line='printk("%s\n", __func__);';
$add_line="\n\t$add_line\n";

my $line;
my $num = 0;

open $in , '<', $file or die "can't open input file $file" ;
open $out , '>',$outfile or die "can't open output file $outfile" ;

$/='{';

while ($line=<$in>)
{
    my $outline = $line;

    if($line =~/(\w+)\s*\([^\{\}\;\/]*\)(\s*|\n#endif\s*)\{$/)
    {
        my $name =$1;
        my $pre = $`;

        if(($name !~/^(if|for|while|do|switch|defined)$/) 
            &&($name !~/(for|do)_each/)
            && ($pre !~/\s(_init|_exit)\s+\w*\s*$/))
        {
            $num++;
            $outline .= $add_line;
        }    
    }

    print $out $outline;
}    

close $in;
print STDOUT $num, "\n";

add_printf.sh

#!/bin/sh

filelist=`ls *.c`
for file in $filelist
do 
perl add_printf_to_all_func.pl ${file}  ${file}.c
mv  ${file}.c ${file}
done

使用方法

确保两个文件在同一文件夹下

./add_printf.sh
  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值