【问题标题】:Running strace with a -o (redirect the trace output) parse the trace output while printing the stdout使用 -o 运行 strace(重定向跟踪输出)在打印标准输出时解析跟踪输出
【发布时间】:2022-01-27 07:22:11
【问题描述】:

我正在尝试运行一些 strace 命令,如下所示:

my @cmd = shell_quote(@ARGV);

strace -f -o trace.log -e trace=file @cmd

我想查看 trace.log 并在它运行时对其进行解析,并将@cmd 标准输出打印到屏幕上。

知道我应该怎么做...帮助:)

sub shell_unquote {

    my @strings = (@_);
    my $arg;
    for my $arg (@strings) {
        if(not defined $arg) {
            $arg = "";
        }
        $arg =~ s/'\n'/\n/g; # filenames with '\n' is quoted using \'
        $arg =~ s/\\([\002-\011\013-\032])/$1/g;
        $arg =~ s/\\([\#\?\`\(\)\{\}\*\>\<\~\|\; \"\!\$\&\'])/$1/g;
        $arg =~ s/\\\\/\\/g;
    }
    return wantarray ? @strings : "@strings";
}

【问题讨论】:

    标签: perl strace


    【解决方案1】:
    use IPC::Run qw( run );
    
    run \@cmd,
       '2>', sub {
          # Do something with chunk in $_[0]...
       };
    

    use IPC::Run qw( run );
    
    run \@cmd,
       '2>', new_chunker, sub {
          # Do something with line in $_[0]...
       };
    

    【讨论】:

      【解决方案2】:

      您可以使用命名管道将cmd 与日志解析器同步,而不是从 perl 启动 cmd

      mknod mypipe p
      strace -o mypipe cmd arg arg2 ... argN
      

      在另一个shell中

      perl -nle '/interesting/ and print' mypipe
      

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 1970-01-01
        • 2021-12-12
        • 2015-08-19
        • 1970-01-01
        • 2010-11-13
        • 2011-05-16
        • 2012-09-05
        相关资源
        最近更新 更多