如何静态地获取文件名和行号,从而在C中设置变量?
我有一个用C语言编写的大型软件系统。我有所有的源代码。我试图找到一个工具,可以帮助我确定(最好是通过静态分析)的功能和行号,可以设置一个变量,是我感兴趣的。例如:如何静态地获取文件名和行号,从而在C中设置变量?,c,static-analysis,C,Static Analysis,我有一个用C语言编写的大型软件系统。我有所有的源代码。我试图找到一个工具,可以帮助我确定(最好是通过静态分析)的功能和行号,可以设置一个变量,是我感兴趣的。例如: void func_a(int q) { int z; ... z = q*2; .... func_b(z); // I NEED TO FIND OUT ALL LINES in ALL FILES that can set "z" } int main(int argc,
void func_a(int q) {
int z;
...
z = q*2;
....
func_b(z); // I NEED TO FIND OUT ALL LINES in ALL FILES that can set "z"
}
int main(int argc, char *argv[]) {
int x;
...
x = 38;
...
func_a(x);
}
我想被告知:
main() x = 38;
func_a(x);
void func_a(int q);
func_a() z = q*2;
上面4行决定了我将要发送给func_b()的z值
我已经检查了clang、gtags(使用--idutils)和其他一些。我无法确定这是否得到支持。当然,main()和func_a()可以位于不同的.c文件中,并且有许多与我感兴趣的变量无关的行(这是一个大型软件系统)
任何提示,不胜感激
我有一个用C语言编写的大型软件系统。我有所有的源代码。我试图找到一个工具,可以帮助我确定(最好是通过静态分析)的功能和行号,可以设置一个变量,是我感兴趣的
这个问题无法解决。看见
直觉是,如果你有一些x
,你可以将它的地址&x
任意地传递到别处。你会有复杂的问题
但是,您可以考虑使用(手动添加注释)或调试器。请注意,提供
如果您的C编译器是新近开发的,您可以编写自己的代码来帮助您(并分析程序的表示形式)。期待几周或几个月的工作。在旧版本的GCC中,未维护的(我编写的)可能会很有用。鉴于C中的指针可能指向程序中任何适当类型的对象,这通常是不可能的(停止问题)。您的代码库有多大?数百万行的C代码?您关心的变量是全局变量吗?你有没有记录过他们的地址?如果其中一个答案是“是”,那么这基本上是不可能的,但如果它们都是“否”,那么就有可能。我的代码库很大,当然有上百行。为了便于查询,我希望首先忽略C指针问题。(如果我使用一个指向变量的指针,那么我想将通过该指针的任何更改标记为对我感兴趣的变量的潜在更改。)同样,为了初始查询,没有全局变量。我意识到没有完美或完整的解决方案是可能的,但至少有一个工具可以帮助确定设置变量的代码行(直接或间接)?