任何人都可以建议跟踪函数的每个调用吗?

时间:2010-11-14 03:31:23

标签: c linux perl

我想跟踪函数调用的每个路径。 例如:

int a()
{
    b();
    return 1;
}
void b()
{
}
int main()
{
    int x=a();
    return 0;
}

所以我的通话追踪是主 - > a-> b 通过这种方式,我想跟踪每个设置的呼叫路径。 我想到了深度优先搜索。但我不确定这会怎样。 任何人都可以建议我在perl中实现任何具体方法吗? 我将拥有C程序文件并将在其上运行perl脚本以获取调用跟踪。

3 个答案:

答案 0 :(得分:5)

article中列出了许多免费的调用图程序,包括egypt,它是一个小的Perl脚本,它使用gcc和Graphviz生成C程序的静态调用图。

答案 1 :(得分:0)

我相信Doxygen可以做到这一点。

答案 2 :(得分:0)

一种方法是使用探针自动检测源代码,这些探针在程序运行时收集您想要的信息。您可以使用程序转换工具来执行此操作。

这里a paper on how do collect information abouth "which blocks" get executed,使用转换系统插入此类探针。对探针放置位置的规范进行非常小的更改,以及捕获当前函数的一些小工作将以可靠的方式完成您想要的任务。