标签: call-graph

将C Callergraph与Doxygen合并或确定所有呼叫的并集

我有一个遗留的C代码集合,我正在重构,以便从GUI中分离出C计算代码.由于重度递归的数学核心代码是K&R样式声明,这很复杂.由于嵌套使用了函数参数,我已经放弃了将这些转换为ANSI声明的尝试(只是无法获得最后4个编译器错误).

我需要将一些文件移动到一个纯DLL中,并确定要公开的最小接口,这需要编写包装函数来发布一个类型化的接口.

我已经使用Doxygen @callergraph标记标记了关键源文件,因此为各个函数生成了信息图.除此之外我想做的是合并这些图,这样我就可以确定暴露于外部世界的最窄函数边界.

原始头文件没有用 - 它们将所有内容公开为非类型化C函数.

有数百个函数如此简单地检查生成的调用程序图是很痛苦的.

我正在考虑编写某种DOT合并工具 - 设置DOT_CLEANUP = NO使Doxygen离开中间的DOT文件而不是保留他们生成的png文件.

我并不痴迷于这是一个图形解决方案 - 如果有人能够建议使用Doxygen的XML输出来实现相同目标的替代分析工具(免费或相对便宜)或技术,我会很高兴.

在文件级别合并的调用图确实对客户端文档有一定的吸引力,而不是简单的列表:-)

refactoring code-analysis doxygen graphviz call-graph

4
推荐指数
1
解决办法
1446
查看次数

C++ 调用图,但作为文本

对于给定的方法(例如 Settings.cpp getSettingByName()),我想获得调用图的文本表示。我听说 doxygen 可以生成调用图的图像,我对文本输出更感兴趣。

例如,如果我给它“Settings.cpp getMethodByName”它会返回:

Settings.cpp getSettingByName();
    SettingsWrapper.cpp getMaximumSpeed();
        ECU.cpp monitorSpeed();
            Operate.cpp runECU();
                Main.cpp run();
        CruiseControl.cpp accelerate();
            Operate.cpp runCruiseControl();
                Main.cpp run();
        Radio.cpp playApplauseThroughSpeakers();
            Operate.cpp runStereo();
                Main.cpp run(); 
Run Code Online (Sandbox Code Playgroud)

这可能吗?

非常感谢,菲德尔

附:不要害怕代码,这只是一个例子。

c++ methods doxygen hierarchy call-graph

4
推荐指数
1
解决办法
1173
查看次数

代码流可视化软件

是否有任何工具,免费或商业,可以为C#方法生成流可视化图形?它应该能够处理决策点(可能将它们表示为顶点)和顺序代码片段(可能将它们表示为边缘).我知道有类似的C/C++和Java相关的问题,但我对C#感兴趣.

c# call-graph

3
推荐指数
1
解决办法
3612
查看次数

OCaml或Reason的调用图生成器

我想分析一个OCaml/Reason代码库并理解各种函数之间的调用.有没有提供此类功能的工具?

ocaml analysis call-graph control-flow-graph reason

3
推荐指数
1
解决办法
324
查看次数

如何为Perl模块和脚本生成调用图?

我有一堆Perl脚本和Perl模块由某人给我.我有一个驱动程序来测试所有这些脚本和模块.我想生成一个调用图并查看流程.

Perl有没有可用的东西呢?
我喜欢像pycallgraph(对于python)这样的东西.我在AIX中运行所有这些.

perl aix call-graph

2
推荐指数
1
解决办法
1013
查看次数

可自定义的静态Java调用图生成器?

我必须重构并维护一堆看起来很糟糕的Java类.许多人具有以下实施模式

class Machine {
    public int advance(int state) {
        switch(state) {
        case 7:  return step_7();
        case 13: return step_13();
        case 4:  return step_4();
        }
    }
    private int step_7() {
        if(something) return 13; else return 4;
    }
    private int step_13() {
        ...
        return 4;
    }
    private int step_4() {
        if(miep) return 7;
        ...
        return 13;
    }
}
Run Code Online (Sandbox Code Playgroud)

从这里我想生成一个图形(与Graphviz和dot) - 一种"静态调用图",但不完全.

我在这里游戏如何自动执行此操作,除了使用Perl或Python自己解析Java代码.

我真正喜欢的是有一个抽象语法树(AST)或类似我可以浏览的类,同时打印dot-code.

  • 如何在这里生成可遍历的AST?我猜测遍历将在Java中完成,但如果输出是任何文本表示,那就没问题(gprof想到这里).
  • 还有其他方法,不使用AST吗?也许我只是盲目的,有一种更好,更简单的方法.

java profile graphviz dfa call-graph

2
推荐指数
1
解决办法
1294
查看次数

Perf 中奇怪的回溯

L3-misses我使用以下命令在简单的基准测试中提取导致用户级别的回溯evince

sudo perf record -d --call-graph dwarf -c 10000 -e mem_load_uops_retired.l3_miss:uppp /opt/evince-3.28.4/bin/evince
Run Code Online (Sandbox Code Playgroud)

很明显,采样周期相当大(连续采样之间有 10000 个事件)。对于这个实验, 的输出perf script有一些与此类似的样本:

EvJobScheduler 27529 26441.375932:      10000 mem_load_uops_retired.l3_miss:uppp:     7fffcd5d8ec0         5080022 N/A|SNP N/A|TLB N/A|LCK N/A
    7ffff17bec7f bits_image_fetch_separable_convolution_affine+0x2df (inlined)
    7ffff17bec7f bits_image_fetch_separable_convolution_affine_pad_x8r8g8b8+0x2df (/usr/lib/x86_64-linux-gnu/libpixman-1.so.0.34.0)
    7ffff17d1fd1 general_composite_rect+0x301 (/usr/lib/x86_64-linux-gnu/libpixman-1.so.0.34.0)
  ffffffffffffffff [unknown] ([unknown])
Run Code Online (Sandbox Code Playgroud)

在回溯的底部,有一个名为 的符号[unknown],看起来没问题。但随后就呼叫了线路general_composite_rect()。这个回溯OK吗?

AFAIK,回溯中的第一个调用者应该是类似_start()或 的东西__GI___clone()。但回溯不是这种形式。怎么了?

有什么办法可以解决这个问题吗?截断的(部分)回溯可靠吗?

linux trace performancecounter call-graph perf

2
推荐指数
1
解决办法
2921
查看次数

C 程序中调用图生成的静态分析

我发现很多程序,例如Doxygengprof可以使用外部可视化工具(例如graphviz.

不幸的是,这些程序需要大量的初始配置,我只想知道使用malloc.

该项目很大,有数百个文件和某个main功能。

我目前需要一些时间的解决方案是编写一个 Perl/Python 脚本:

  1. 搜索malloc\s*(.*?)来电。
  2. 检索父函数的名称
  3. 搜索调用此父函数的位置
  4. 转到 2

这里有一些实用程序可以帮助我吗?

该项目在 Microsoft VisualStudio 2010 上,并生成 dll 作为嵌入式设备的 API。外部库的使用量不是很大。我们使用常用的库,例如 ftdi 或 wdapi910

c call-graph

1
推荐指数
1
解决办法
1416
查看次数

How to tell if a function is built-in or self-defined by its name?

I generate a call graph of a complex MATLAB system, and I want to know which functions are built-in and mark them.

matlab function built-in call-graph function-declaration

1
推荐指数
1
解决办法
60
查看次数