English 中文(简体)
使用Python在C ++文件中查找特定函数的调用
原标题:
  • 时间:2008-10-31 09:24:45
  •  标签:

I need to find all occurrences of a function call in a C++ file using python, and extract the arguments for each call.
I m playing with the pygccxml package, and extracting the arguments given a string with the function call is extremely easy:

from pygccxml.declarations import call_invocation

def test_is_call_invocation(call):
    if call_invocation.is_call_invocation(call):
        print call_invocation.name(call)
        for arg in call_invocation.args(call):
            print "   ",arg
    else:
        print "not a function invocation"

我找不到的是从文件中解析电话的方法:

from pygccxml import parser
from pygccxml import declarations

decls = parser.parse( [ main.cpp ] )
# ...

Is there a way to find the calls to a certain function using the pygccxml package?
Or maybe that package is an overkill for what I m trying to do :) and there s a much simpler way? Finding the function calls with a regular expression is, I m afraid, much trickier than it might look at a first sight...

最佳回答

XML-GCC不能做到这一点,因为它只报告数据类型(和函数签名)。它忽略了函数体。要查看此内容,请创建a.cc:

void foo()
{}

void bar()
{
        foo();
}

然后运行 gccxml a.cc -fxml=a.xml。查看生成的 a.xml,可以看到 foo(或其id)的唯一提及在 foo 的声明中。

另一种选择可能在codeviz中提供(http://www.csn.ul.ie/~mel/projects/codeviz/)。它由一个对gcc 3.4.6的补丁组成,可以生成调用依赖信息 - 再加上一些生成graphviz输入的perl脚本;后者可以安全忽略。

作为另一种选择(不需要gcc修改),您可以复制埃及的方法(http://www.gson.org/egypt/);这个方法解析GCC RTL转储。它应该与任何最近的GCC一起工作,但是可能会出现您无法调用内联函数的情况。

无论如何,使用这些方法,您将不会收到宏的“调用”,但实际上可能是更好的选择。

问题回答

暂无回答




相关问题
热门标签