问题标签 [control-flow-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
794 浏览

c# - C#:从代码访问调用层次结构

在 Visual Studio 中,您可以显示单个函数的调用层次结构。我正在寻找的是相同的功能,但可以从 C# 代码内部访问。

是否可以通过自写的 Visual Studio 插件使用某些 API?或者我可以直接访问一些库来进行代码分析吗?

我通过一些静态代码分析得到程序的CFG就足够了。

0 投票
2 回答
1602 浏览

loops - 识别 LLVM CFG 中的循环

我正在 llvm 中编写一个传递,它将识别循环不变量并将那些使用这些不变量的指令提升到循环体上方。但为此,我需要知道从一个节点到另一个节点是否有任何后沿。例如,我想找出从节点 N 到节点 H 是否存在后沿,其中节点 H 支配节点 N,这将帮助我识别自然循环。如何在 CFG 中找到从一个节点到另一个节点的任何边?我在 LLVM 中找不到任何名为 CFG 的类,我可以从中收集这些信息。

0 投票
2 回答
1780 浏览

design-patterns - 窥孔优化模式

我一直在阅读本地优化编译器技术,但一直不知道它们是如何实现的。这个想法是优化器每次都会查看代码的“窗口”,并以某种方式检测模式并用更优化的版本替换它们。

我的问题是,如何发现这些模式?(假设您的平台是一个为组装计算机输出汇编代码的 VM,例如 Schocken's Hack)。

人们是否真的手动检查代码(使用控制流图或 DAG 或其他),然后收集所有识别的模式并将它们编码到优化器中?或者有没有自动的方法。

例如,您在分析器中输入要优化的代码,它会喷出所说的模式。如果是这样,一个人如何开始写一个?

0 投票
1 回答
2228 浏览

static-analysis - 如何从 JSON 对象 (AST) 构建控制流图 (CFG)

我想从以 JSON 格式给出的 AST 构建控制流图 (CFG)。所以这个 AST 是在 TouchDevelop 中针对每个脚本自动创建的。而且由于 TouchDevelop 不是面向对象的编程,我还可以使用访问者模式吗?任何有用的指针将不胜感激。

Update1:​​我的问题是我不明白从哪里开始。从互联网上,我应该使用访问者模式遍历 AST 来访问每个节点并收集信息。从那里,我可以构建一个 CFG,然后进行数据流分析。但是有两个问题:

1) AFAIK,我需要面向对象的编程模型来使用访问者模式,(我可能错了)TouchDevelop 不是。

2) 下面给出的 AST 不是我在互联网上找到的 AST 格式。它是 JSON 格式。我想我可以解析 JSON 以将其转换为所需的 AST 结构,但我不太确定。

示例脚本的源代码

生成的 AST(JSON 格式)如下所示:

0 投票
3 回答
3060 浏览

llvm - llvm 将控制流图转储到文件中

我想在我的一张通行证中在 llvm 中构建一个控制流图。我目前使用以下内容来显示 CFG

问题是它会弹出一个窗口。我只想在那个特定的程序点将 cfg 转储为点文件(或 jpg,如果可能的话),而不是显示在窗口中。我该怎么做?我正在使用 llvm 3.1。

注意:我正在修改我的通行证中的 cfg,在该程序点之前。因此我不能使用opt -view-cfg.

更新:

多亏了 Mishr,我才能用这个来绘制图表

WriteGraph(File, (const llvm::Function*) &fun, true, "test"); //I have also tired with false

显示了 CFG。但是节点是空白的。如何显示节点的内容

0 投票
1 回答
840 浏览

python - for循环的控制流程图

我正在开发一个 python 库,它将 python 源代码转换为控制流图(CFG)。作为中间步骤,我已将源代码转换为 xml 表示形式。

例如下面的源代码:

转换成如下xml:

现在,我需要做的就是把这个xml变成一个CFG,表示如下:

现在,我已经处理了迄今为止我见过的大多数情况。但是,我在将 for 循环的正确端连接回 for 循环的顶部/定义时遇到了一些问题(第 34 行)

我非常感谢任何能帮助我弄清楚如何找出 for 循环的哪些节点连接回 for 循环顶部的人。在这个例子中,只有一个这样的节点,即第 40 行的那个

0 投票
1 回答
823 浏览

eclipse - 如何在运行时制作用户定义代码的控制流图

假设用户在编辑文本(TextBox 或其他)中编写了一些代码,并且程序识别所有定义使用。现在程序要使用 Eclipse 制作 CFG 的能力来显示控制流图。

  1. 可能吗 ?
  2. 我们可以使用其他内置 CFG 功能的工具来显示用户定义代码的 CFG,如 Visual Studio 吗?

我在谈论任何类型的应用程序、应用程序(Windows 窗体、Android 等)

0 投票
1 回答
5629 浏览

llvm - 在 xvcg 中显示来自 llvm 的 CFG

llvm 的程序中有一个-view-cfg选项(docopt ) ,它使我能够通过dot程序查看控制流图。但是 CFG 太大而无法从 dot 呈现为 postscript。我知道有能够显示复杂图形的实用程序,包括 CFG(它的xvcg“VCG 工具 - 编译器图形的可视化”)。

那么,如何以 xvcg 格式输出 llvm 的 CFG 呢?

0 投票
0 回答
187 浏览

java - 命令行控制流程图

是否有一些工具可以从命令行生成人类可读的控制流图?最好基于文本而不是图片。

我见过的几乎每一个 CFG 生成器都是一个 Eclipse 插件,它大大减慢了速度。

编辑:这里只有java。

0 投票
1 回答
1584 浏览

assembly - 如何从程序集生成控制流图?

对于上下文,我正在尝试编写从 AVM2(ActionScript 虚拟机 2)字节码/程序集到高级 ActionScript 3 代码的反编译器。据我所知,这需要我分析程序集并从中生成结果控制流图,以便推断诸如循环和条件分支(if/else)之类的结构。

给定一些组件,例如:

生成控制流图的算法是什么?