天道酬勤,学无止境

Tools for generating a control flow graph from source code [closed]

I need a tool to generate a control flow graph from java source code. Are there such tools available? Is there a possibility to also generate source code if I have a control flow graph?

评论

See my company's (Semantic Designs) Java Front End. It will compute control flow graphs for methods from source code.

The Java Front End is built on top of DMS Software Reengineering Toolkit, which provides generic machinery for manipulating (parsing, analyzing [e.g., extracting control flow graphs]), transformating, and generating) code.

If one has a particular control flow graph, DMS provides the machinery to enable you to build a graph walker, and from that you could reasonably build Java ASTs that can then be used to produce Java source code. Obviously your control flow graph would have to use vocabulary that translates into Java concepts easily (e.g., no Prolog "unify this" operators), or you will have much harder time generating corresponding Java code. If you generated the graph from Java code, this would clearly be the case.

Sparx Systems' EA has a tool which hooks into a debugger and generates UML sequence diagrams:

From the Sparx marketing spiel:

The debuggers built into Enterprise Architect are specifically designed to enable a developer or tester to capture stack trace information as they ‘walk through’ the executing code, performing runtime inspection of suspended threads. They can then use the final stack trace history to generate Sequence diagrams within Enterprise Architect, converting the actual code execution and calls into visual diagrams.

I'm pretty sure that this is a one way transformation only - no round tripping.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 生成 Haskell 函数依赖(控制流)图的工具?(Tools for generating Haskell function dependency (control flow) graph?)
    问题 注意不是“功能依赖”。 是否有可用的工具允许我从源代码构建静态函数依赖图? 以图形方式向我指示哪些功能取决于哪些其他功能的东西。 回答1 是的,肯定有。 如果您查看 Hackage 上的开发类别,您会发现以下工具: 绘制包依赖关系——nb 需要旧的 cabal 绘制模块依赖关系绘图函数调用绘制运行数据结构 特别是,SourceGraph 包含许多分析通道,包括: 可视化函数调用计算圈复杂度可视化模块导入 您可能感兴趣的其他工具包括: HPC,用于可视化测试覆盖率 ThreadScope,用于可视化运行时行为 lscabal,从包中提取模块 这是 SourceGraph 在 cabal2arch 上运行生成的函数调用图:
  • 从ANSI C代码获取控制流程图(Getting Control Flow Graph from ANSI C code)
    问题 我正在构建用于测试辅助应用程序的工具。 只需加载代码,查看控制流程图,运行测试,标记所有命中的顶点。 我正在尝试通过解析代码自行构建CFG。 不幸的是,如果代码被嵌套,它会变得混乱。 GCC提供了从编译代码中获取CFG的功能。 我可能会为其输出编写解析器,但是我需要行号来设置断点。 使用-fdump-tree-cfg或-fdump-tree-vcg输出控制流图时,是否可以获取行号? 回答1 对于C程序的控制流程图,您可以查看针对C的现有Python解析器: PyCParser pycparser pyclibrary(pyclibrary的分支) 琼恩 CoFlo C / C ++控制流程图生成器和分析器 调用图是与控制流程图密切相关的构造。 有几种方法可以为C代码创建调用图(函数依赖项)。 这可能有助于控制流程图的生成。 在C中创建依赖关系图的方法: 使用cflow: cflow + pycflow2dot + dot(GPL,BSD)cflow健壮,因为它可以处理无法编译的代码,例如缺少包含代码。 如果预处理器指令被大量使用,则可能需要--cpp选项来预处理代码。 cflow + cflow2dot +点(GPL v2,GPL v3,Eclipse Public License(EPL)v1)(请注意,cflow2dot需要一些路径修复才能起作用) cflow +
  • 【代码质量】C/C++代码静态分析与常用分析软件工具
    文章目录 1 前言2 什么是静态分析3 静态分析方法4 静态分析内容4.1 内存相关4.2 逻辑类4.3 编程风格与其他 5 常用静态分析工具6 参考文章 1 前言   对于大型C/C++项目,一般是以团队分模块开发的方式,代码量数十万或者更多。由于代码量的激增以及开发人员众多,代码出现bug的概率也随之增加。——这是一个数学上概率论的问题,而不是程序员的编码技术问题。其中一部分问题是非执行过程引起的静态问题,如内存泄露、内存越界、野指针、逻辑模糊、死锁等等,在发布代码前可以借助一些检测工具进行代码分析,以排除静态bug。除了检查代码静态bug外,还可以判断代码复杂度、代码质量、代码执行效率等等,作为提高代码质量的依据。 2 什么是静态分析    程序静态分析(Program static analysis)是指在不执行代码情况下, 通过词法分析、语法分析、语义分析、控制流、数据流分析等技术对源代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。 通过对代码进行审查分析,检查代码的功能、性能,提升代码质量。静态分析有两种方式,分别是人工审查和软件工具分析。 人工审查,依赖于人,适合于小型项目或者代码量不大的场景;效率低、易遗漏 软件工具分析,理想的方式, 准确率、可靠性、效率都远高于人工审查 3 静态分析方法 词法分析,依次对代码的字符流进行扫描
  • Tools for generating Haskell function dependency (control flow) graph?
    Note not "functional dependency". Are there tools available that allow me to build a static function dependency graph from source code? Something which indicates to me which functions depend on which other ones in a graphical manner.
  • 代码解析工具汇总
    代码解析工具 一.针对多种语言ANTLRSonarQubetree-sitter 二.针对C语言pycparserJoern 三.针对JavaJavalangJavaParserEclipse AstParser 四.针对pythonast库tokenize库 代码解析工具的主要作用是输入源代码,可以输出其AST或者CFG(控制流图),DFG(数据流图)。 一.针对多种语言 ANTLR Antlr4是一款开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器。现在很多流行的应用和开源项目里都有使用,比如Hadoop、Hive以及Pig等都在使用ANTLR来做语法分析。 ANTLR可以分析现有多种编程语言,包括C,Java,python,php等等,一般g4为antlr的语法文件,只要编程语言有相应的g4文件,就能生成自定义解析工具。 ANTLR有java api和python api(不过感觉python api没有java api成熟)。 SonarQube SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误。同时也开源,可以用SonarQube的API来自定义构建语法解析工具,目前除了C/C++,其它的语言(java,python,php等)都开源。 官方自定义demo 同时SonarQube是用Java编写的
  • 如何从源代码为任何应用程序创建数据流图 (DFG/SDFG)(How can one create a data flow graph (DFG/SDFG) for any application from its source code)
    问题 我进行了大量研究,以弄清楚如何从应用程序的源代码为应用程序创建 DFG。 对于某些应用程序,例如 MP3 解码器、JPEG 压缩和 H.263 解码器,可以在线使用 DFG。 我一直无法弄清楚如何从源代码中为 HEVC 等应用程序创建 DFG? 是否有任何工具可以为此类复杂的应用程序立即生成数据流图,还是必须手动完成? 请就此事给我建议。 编辑:我将 Doxygen 用于 HEVC,我可以看到不同的功能如何相互交互。 然而,每个函数都有很多入口和出口点,一段时间后 Doxygen 的输出变得太混乱而无法理解。 我还看了 StreamIt:http://camlunity.ru/swap/Library/Conflux/Stream%20Programming/streamit-cc_stream_graph_programming_language.pdf 它看起来很方便,但它为更简单的应用程序(如 MP3 解码器)生成的图表太复杂了。 为了生成连贯的 DFG,我是否必须重新编写整个源代码? 回答1 您想从任意语言中提取数据流图。 你暗示你想要一种方法来做到这一点。 这手动不实用……你需要一个工具。 这样的工具非常难以构建。 为此,对于每种语言,您必须能够: 定义工具的语言,以您在实践中找到的形式(不仅仅是语言参考手册版本)。 与标准相比,野外的 C++ 以许多有趣的方式弯曲
  • Java Control Flow Graphs Library [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 1 year ago. Improve this question I need to manipulate control flow graphs for Java code in a project. What might be a good java library to generate control flow graphs in Java. So far I have found a couple eclipse plugins (heavily dependent on eclipse APIs) and standalone tools (cannot embed in my code).
  • 源代码分析工具? [关闭](Tool for source code analysis? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 7年前关闭。 改进这个问题 C 和 C++ 的源代码分析和探索工具似乎非常缺乏。 是否有任何工具可用于收集有关 C 和/或 C++ 源文件的信息? cscope 做了我需要的一部分,Doxygen 看起来更近了。 至少包含所有函数、调用者、被调用者、变量引用等。也许 Doxygen 的 xml 输出会起作用。 理想情况下,gcc 或 llvm 可以用于此目的,但我还没有找到一种方便的方法来做到这一点。 有什么建议? 回答1 有一个 clang 静态分析器,它是 llvm 的 clang 前端的一部分,但我不知道它对 C/C++ 的效果如何。 似乎他们的大部分努力都朝着 Objective-C 方向发展。 http://clang-analyzer.llvm.org/ Doxygen 适用于调用图,您需要安装 GraphViz 并使用 doxywizard 选择图部分中的调用图和由图调用复选框(专家模式点部分中的 CALL_GRAPH 和 CALLER_GRAPH。) 回答2 您可能会发现 SourceMonitor 有助于对代码进行更多统计分析,而且它是免费的 :) 回答3 试试 Klocwork。
  • 解析 Java 源代码(Parsing Java Source Code)
    问题 我被要求开发一个软件,它应该能够创建输入 Java 源代码的流程图/控制流。 所以我开始研究它并得出以下解决方案: 要创建流程图/控制流,我必须识别给定源代码中的控制语句和函数调用现在我有两种识别方法: 通过编写我自己的语法来解析源代码(我认为这是一个复杂的解决方案)。 我正在考虑为此使用 Antlr。 将输入源代码文件作为文本读取并搜索特定模式(可能会变得效率低下) 我就在这里吗? 或者我错过了一些非常基本和简单的东西? 哪种方法会花费更少的时间并有效地完成工作? 在这方面的任何其他建议也将受到欢迎。 任何其他有效的方法都会有所帮助,因为输入源代码可能跨越多个文件并且可能相当复杂。 我擅长 .NET 语言,但这是我的第一个 Java 大项目。 我有编译器设计的基本知识,所以写语法对我来说应该是不可能的。 对不起,如果我不清楚。 请要求任何澄清。 回答1 我会使用 Antlr 并使用现有的 Java 语法:https://github.com/antlr/grammars-v4 回答2 所有处理 Java 代码的工具通常首先决定它们是要处理语言 Java 还是 Java 字节码文件。 这是一个战略决策,取决于您的用例。 我可以为流程图生成两个图像。 当你决定了那个问题。 已经有几个框架或库可以帮助您解决这个问题。 字节码工程有:ASM、JavaAssist、Soot、BCEL
  • angr分析程序的控制流图CFG
    angr分析程序的CFG 概述 在二进制上实现基本的分析一般是通过控制流图。一个CFG是一个基本块为节点,jump/ret/call为边的图。 在angr里,主要有两种CFG,一种是静态的CFG(CFGFast)和动态的CFG(CFGEmulated) CFGFast使用静态分析来产生CFG。生成的速度很快,但是理论上有些控制流的转换只在执行的时候确定。这个和其他逆向工具差不多,结果也匹配输出。 CFGEmulated使用符号执行来去获取CFG。理论上更精准,但是比较慢。目前还不是完整的,因为模拟执行时的准确性不是很好。 可以用下面的代码来构建CFG: >>> import angr # load your project >>> p = angr.Project('/bin/true', load_options={'auto_load_libs': False}) # Generate a static CFG >>> cfg = p.analyses.CFGFast() # generate a dynamic CFG >>> cfg = p.analyses.CFGEmulated(keep_state=True) 使用CFG CFG是基于NetworkX di-graph实现的。意味着NetworkX 的API都可以用。 >>> print("This is the
  • Java 编译器的内部架构 [关闭](Internal Architecture of Java Compiler [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 5年前关闭。 改进这个问题 我从事Java工作已有 8 年多。 上周,在我公司的一个小型会议上,我的一位同事问我Java Compiler究竟是如何工作的? 我没有回答。 我试着解释一下,就像 Java Compiler 将语句一一处理并将它们转换为不针对任何OS而是针对JVM字节码。 即使是我,也没有人对这个答案感到满意。 现在的主要问题是 java 编译器究竟是如何工作的。 即在编译Java文件的情况下,编译器将完成多少步骤或阶段或阶段。 Java's compiler架构究竟是什么? 如果同一个 .java 文件中有多个Java classes怎么办。 那么将编译多少个类。 如果导入指向未编译的 Java 类怎么办? 那么未编译的类是编译还是忽略? 我用谷歌搜索了半天以上,所有人都提供了与我给同事相同的答案。 但最后我在这里找到了一些有用的教程。 但是本教程的内容也不太深入,我无法想象该教程。 我仍然不满足,渴望从你那里学到更多关于这方面的东西。 所以如果有人比我和上面的博客更了解一些东西,我可以通过使用它来可视化Java Compiler的内部架构究竟是什么,请解释一下。 回答1 一些基本步骤: parse:读取一组 *.java
  • Reflector 如何反编译代码?(How does Reflector decompile code?)
    问题 Red Gate Ant Profiler 或 Reflector 等工具如何将 IL 转换为 C# 或 VB.NET 代码? 我最近注意到 Red Gate Ant Profiler 生成的源代码与最初编写的源代码不同。 它生成了一个while循环,我在其中使用了foreach 。 这让我思考。 我在 Reflector 中打开了 Reflector.exe 本身,但他们的代码大部分(不是全部)都被混淆了。 回答1 反编译器通常通过查看 IL 并构造在语义上与 IL 等效的源代码来工作。 这并不总是产生原始源代码,因为 IL 会丢弃一些高级信息(尽管不像机器代码那么多)并且因为通常有几段代码编译为相同的 IL。 例如, foreach循环相当于某种while循环(先设置枚举器,然后循环直到枚举器耗尽,然后在每一步都将枚举器推进)。 回答2 实现反编译的常用技术是使用称为“间隔分析”的东西来识别循环的范围。 当与习语识别和一种称为“图的派生序列”的模式相结合时,可以从包含汇编语言(或 MSIL)的控制流图开始并迭代地简化它,直到您拥有单个 AST(抽象语法树)节点表示程序(或方法)的“源代码级”视图。 给定 AST,生成源代码就很简单了:您只需打印生成的 AST。 以下是更多信息的一些链接: http://en.wikipedia.org/wiki/Interval_
  • 白盒测试用例设计方法学习笔记(二)----基本路径测试法
    转载请注明出处。 白盒测试用例设计方法主要分为两种:1.逻辑覆盖法;2.基本路径测试法。 本文主要对基本路径测试法的相关进行整理。 基本路径测试法 基本路径测试法 是在程序控制流图的基础上通过分析控制构造的环境复杂性导出基本可执行路径的集合,从而设计测试用例的方法。用这种方法设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次。 基本路径测试法的步骤 1.绘制程序流程图,导出程序的控制流图; 2.计算程序的圈复杂度; 3.确定线性独立路径集合; 4.生成测试用例。 控制流图的图形符号 简单实例介绍 第一步是绘制程序流程图,导出程序的控制流图 为了更加直观地了解和记忆基本路径测试法,下面我展示一个简单的例子。首先展现的是程序流程图。 下面展示的是根据程序流程图导出的程序控制流图。 以上就是基本路径测试法的第一步:绘制程序流程图,导出程序的控制流图。 第二步就是计算程序的圈复杂度 首先我们先来理解什么是圈复杂度。 圈复杂度是一种代码复杂度的衡量标准,在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系。(概念来源:百度百科) 那么理解完了圈复杂度的概念,我们接下来就要知道圈复杂度的计算方法。
  • 数据流编程语言(Dataflow Programming Languages [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 6年前关闭。 改进这个问题 什么是数据流编程语言? 为什么要使用它? 它有什么好处吗? 回答1 在控制流语言中,您有一个对外部数据进行操作的指令流。 条件执行、跳转和过程调用改变了要执行的指令流。 这可以看作是流经数据的指令(例如,指令对通过指令加载数据的寄存器进行操作——数据是静态的,除非指令流移动它)。 控制流“if”语句跳转到指令流中的正确分支,但数据不会被移动。 在数据流语言中,您有一个数据流,从指令传递到要处理的指令。 条件执行、跳转和过程调用将数据路由到不同的指令。 这可以被视为数据流经其他静态指令,例如电信号如何流经电路或水流经管道。 数据流“if”语句会将数据路由到正确的分支。 数据流功能和语言的一些示例: 电子表格本质上是数据流 Unix 管道 Futures 和 promises 是许多现代语言中的数据流或类似数据流的结构参与者模型中的消息传递是数据流一些语言具有数据流特性: Oz 有数据流变量 Groovy 有 GPars Clojure 有 clojure.contrib.dataflow、Reagi 和 Javelin 文本语言 VHDL、Verilog 等硬件描述语言本质上是数据流查克楔形文字 Lustre,用于国防
  • 同步数据流语言代码生成工具的研究进展
    摘要 同步数据流语言(如Lustre,Signal)近年来在航空、高铁、核电等安全关键领域得到了广泛应用,因此与这类语言相关的开发工具本身的安全性问题受到高度关注.同步数据流语言到串行命令式语言的代码生成工具是此类工具的典型代表(如Scade)。构造代码生成工具的途径可分为两大类:一类是传统的方法,例如通过大量测试和严格的过程管理等手段来实现;另一类是通过形式化方法,例如直接对编译器本身进行形式化证明,采用翻译确认的方法等。近年来,形式化方法作为构造和验证代码生成工具的关键途径而得到广泛的重视,有望最大限度地解决“误编译”问题,因而成为新的研究热点。文章在介绍代码生成工具的形式化构造和验证方法的基础上,特别聚焦于同步数据流语言代码生成工具的相关研究工作,对其现状进行综述和分析。 1引言 计算机技术日益广泛地应用于航空航天、高速铁路、核电能源和医疗卫生等领域的安全关键系统(Safety-CriticalSys-tem,SCS)中。SCS一旦失效,将给人类的生命财产、社会生产和生活环境带来巨大的破坏。在现代计算机技术的发展中,相比软件来说,硬件方面的安全性保障技术更加成熟,人为因素导致硬件故障的概率相对较小。虽然人们一直关注于软件安全性问题,并积累了大量研究成果和实践经验,但软件方面的安全保障目前仍旧是计算机系统安全性中的薄弱环节
  • How can one create a data flow graph (DFG/SDFG) for any application from its source code
    I have done a lot of research to figure out how a DFG can be created for an application from its source code. There are DFG's available online for certain applications such as MP3 Decoder, JPEG compression and H.263 Decoder. I haven't been able to figure out how I can create a DFG for an application such as HEVC from its source code? Are there any tools which can instantly generate data flow graphs for such elaborate applications or does it have to be done manually? Please advise me regarding this matter. EDIT: I used Doxygen for HEVC and I could see how different functions were interacting
  • 软考软件设计师常考知识点
    一.软件设计师上午题常考点总结 自己刷题时总结的软件设计师上午题基础知识的常考点,后面的数字为教材上相关知识点所对应的页码。教材为清华大学出版社的软件设计师第5版。 1.海明校验码;Gantt和PERT图;【291】 2.甘特图特点:能清晰的描述每个任务从何时开始,到何时结束,以及任务之间的并行关系。但是他不能清晰的反应出各任务的依赖关系。 PERT图特点:不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系。在PERT图中,关键路径是图中最长的一条路径。而松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其所需完成的事件。但是PERT图不能反应任务之间的并行关系。以及PERT图的关键路线(累计时间最长的的路线称为关键路径)和某小段线路的最迟开始时间。 3.正规式的转换:需要注意的是,编译原理里面的正规式叫做范式,和正则表达式不是一个概念,但是有相通之处:都是通过一定的语法规则来描述文法,也就是所谓的匹配。易错点:ab* 不是 0~n个ab, 而是a + 若干个b(包括0个)。完整的写法应该是 a.b*。(ab)* 才是若干个ab。【74】 4.计算有向图G的环路复杂性的公式为V(G) = m - n + 2,其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。 5.前趋图PV操作 6.UML图、二叉树、设计模式
  • Python 代码一键转流程图
    Python 代码转流程图 在设计程序时,类图、流程图都是很有用的工具,我们有很多工具来绘制这些图纸,甚至还能用它们生成最基本的框架代码。也有时候我们需要把已经写好的代码反向转成类图、流程图,比如写作业和别人分享设计的时候。 代码转类图也有挺多工具的,VS Code、IntelliJ IDEA 这些常用的 IDE 都可以装插件来完成这一工作。而如果你做微软家的开发,Visual Studio 可选安装的“类设计器”,更是强到不像话,轻松吊打我见过的其他任何同类工具,就这一点来说, VS 对得起「宇宙第一 IDE」的称号。 然而,代码转流程图,相对来说,这个需求少一些,工具也没那么丰富。最近我突然需要把一些 Python 代码转成流程图,Google 翻了两页,GitHub 搜了几个项目,发现现有的实现都不太行:要么用的技术太怪(那些用「正则表达式」正面上的可震撼了我一下午),要么跑不起来(依赖条件苛刻,比如某些项目用了对 macOS 不太友好的 PyGame),要么跑出来太丑(凌乱的线条、奇怪的颜色,不是新丑风,是丑到抽风)。 当我看到某高赞项目 Vatsha/code_to_flowchart 甚至集合了上述三大“优点”时,,,我选择了自己动手撸一个 python to flowchart 的工具。 当然,我不是喷 Vatsha/code_to_flowchart
  • 可视化代码流的工具(C / C ++)[关闭](Tool to visualise code flow (C/C++) [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 您是否有任何工具可以简化了解C / C ++代码的任务? 我们只是继承了其他人编写的大量软件,因此我们需要快速入门。 关于可以简化此任务的工具的任何建议? 回答1 SourceInsight和Understand for C ++是获得c / c ++代码分析(包括流程图)的最佳工具。 回答2 概要分析软件使您可以了解已调用了哪些函数。 如果可以使用Linux,请尝试使用KCachegrind 回答3 如果您打开EXTRACT_ALL选项,则Doxygen非常擅长从代码生成图而无需应用标记。 您需要安装GraphViz才能使用HAVE_DOT设置生成图表。 我发现已安装它,并且在Windows上将DOT_PATH保留为空白可以正常工作,但在OS / X上,必须直接指向点工具位置。 ACM Queue中有一篇出色的Code Spelunking文章,其中讨论了有关使用doxygen和DTrace的更多信息。 回答4 我个人使用调试器。 遍历代码,看看它在做什么,以及去哪里是唯一的方法。 但是,您可以通过某些文档生成器(有时会提供帮助)来运行它
  • 为 C 代码生成调用图 [关闭](Generating call graph for C code [closed])
    问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您觉得此问题可以改进并可能重新打开,请访问帮助中心以获取指导。 8 年前关闭。 我正在编写一个工具,我需要为一些 C 项目生成调用图。 我能够使用 clang 生成一个文件的调用图,但是我无法找出如何在包含数十个头文件和源文件的整个项目中生成调用图。 任何可以将调用图生成到可以解析的文件的工具都可以。 一个可用的库会更好。 回答1 另外值得一提的是,优秀的 GNU cflow: GNU cflow 分析一组 C 源文件并打印图形,绘制程序内的控制流图表。 GNU cflow 能够为 C 源代码生成直接和反向流程图。 可以选择生成交叉引用列表。 实现了两种输出格式:POSIX 和 GNU(扩展)。 输入文件可以选择在分析之前进行预处理。 编辑至于图书馆要求。 您可能想“调整” output.c而不是打印,而是对数据执行其他操作。 内部流程被组织成输出处理程序,所以我认为编写自己的处理程序已经可以做到这一点。 虽然它不是开箱即用的。 回答2 把我的评论变成答案。 您可以使用脚本查看程序集输出和过程。 假设在 linux 上使用 gcc,您将-S标志传递给gcc并使用以下内容处理结果: perl -ne '/^([^. \t#].*):/