2

我正在尝试使用grep来查找特定 C 函数的所有调用者。

例如:

void foo()
{
  ...
  ret = my_bar()
}

对于所有出现的my_bar()我想从my_bar()调用的位置打印相应的函数名称。

我已经尝试过(基于正则表达式(grep)需要多行搜索

grep -Pzo "(?s)^{\N*?.*?my_bar" *.c

使用 Perl 正则表达式,但这并不像预期的那样工作。它在直到之前 的函数开始匹配foo()my_bar()

grep/perl 和正则表达式可以做到这一点,还是我必须使用类似的工具cscope

4

1 回答 1

0

一个 Perl 单行程序,它记住最后一个函数,并在my_bar()找到时打印它的名称。这很简单,如果多次调用,它会多次打印一个函数my_bar(),但你明白了基本的想法。

perl -ne '$fun = $_ if /^\w+ \w+\(.+\)$/; if (/my_bar\(\)/) { print "$fun" }' *.c

下面的变体应该涵盖具有多行参数列表和尾随注释的函数:

perl -ne '$fun = $_ if /^\w+ \w+\(.+$/; if (/my_bar\(\)/) { print "$fun" }' *.c
于 2013-09-16T07:17:24.840 回答