使用python查找c++文件中某个函数的调用

2024-06-06 22:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用python在c++文件中查找函数调用的所有实例,并提取每个调用的参数。
我正在使用pygccxml包,使用函数调用提取给定字符串的参数非常简单:

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"

我找不到的是一种获取调用解析文件的方法:

^{pr2}$

有没有一种方法可以使用pygccxml包找到对某个函数的调用?
或者这个软件包对我所要做的事情来说是一种过度的杀伤力:)还有一种更简单的方法吗?用正则表达式查找函数调用,恐怕要比第一眼看到的要复杂得多。。。在


Tags: 文件实例方法字符串fromimport参数is
1条回答
网友
1楼 · 发布于 2024-06-06 22:27:57

XML-GCC不能这样做,因为它只报告数据类型(和函数签名)。它忽略了函数体。为此,请创建一个.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/)中可能有一个替代方案。它包含一个生成调用依赖信息的gcc3.4.6补丁,外加一些生成graphviz输入的perl脚本;后者可以安全地忽略。在

作为另一种选择(不需要gcc修改),您可以从埃及复制方法(http://www.gson.org/egypt/);这将解析gcc RTL转储。它应该适用于任何最近的GCC,但是,可能是您没有得到对内联函数的调用。在

在任何情况下,使用这些方法,您不会得到对宏的“调用”,但这实际上可能是更好的选择。在

相关问题 更多 >