我需要使用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包找到对某个函数的调用?
或者这个软件包对我所要做的事情来说是一种过度的杀伤力:)还有一种更简单的方法吗?用正则表达式查找函数调用,恐怕要比第一眼看到的要复杂得多。。。在
XML-GCC不能这样做,因为它只报告数据类型(和函数签名)。它忽略了函数体。为此,请创建一个.cc:
然后运行
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,但是,可能是您没有得到对内联函数的调用。在
在任何情况下,使用这些方法,您不会得到对宏的“调用”,但这实际上可能是更好的选择。在
相关问题 更多 >
编程相关推荐