我需要在继承的代码库中搜索并消除递归函数调用。 到目前为止,我无法找到任何可以进行静态分析并找到这些功能的工具。
答案 0 :(得分:6)
答案 1 :(得分:4)
如果您的代码通过函数指针进行间接调用,则检测其中的递归调用可能非常困难(在一般情况下可能是不可能的,因为等同于暂停问题。)。
但我完全不确定消除递归是值得的。对于一些递归算法或问题,您只需通过使用堆栈(在堆中)模拟它来替换它,并且这对它没有多大帮助(并使代码不可读)。
更实用的解决方案(至少在Linux上)将限制堆栈大小,并运行测试直到它们通过填充堆栈而中断。然后,您可以使用调试器来了解它是如何发生的。
我认为你不应该为递归而烦恼......
答案 2 :(得分:0)
CIL可以为C程序生成CFG,但有点像使用大锤放入主食。