0

我有一个 C 程序跟踪的控制流程图(在 VM 中执行),它非常复杂。我想知道如果我有一个程序跟踪的 CFG 除了控制依赖项之外,我还能提取什么信息!谢谢

4

1 回答 1

1

这里需要做一个区分:

  • 控制流图是程序控制的近似值控制流图可以告诉您,对于程序的任何运行,可能控制流的位置。程序可能永远不会执行图的某个边缘是完全可行的:

    i := 23;
    x := some_complicated_function_returning_zero();
    if (x < i) {
       print "Hello, world!";
    }  else {
       print "Bad!";
    }
    

在该程序中,else永远不会执行分支,但是程序分析工具通常会报告分支两侧都有控制流边缘。这是因为程序分析是近似的。

  • 程序的跟踪是程序控制流图中边的遍历。一组好的测试通常会覆盖许多可能的控制流路径(或者至少是那些可行的,直到控制流图的构造不精确),但除此之外,测试用例涵盖了广泛的变量之类的东西在这些执行路径中的取值范围。

跟踪将让您看到程序在一次运行中是如何执行的,而控制流图将让您说出“我的程序可以执行的可能方式是什么”。

实际程序很大,因此整个程序的控制流图将非常大,但是,由于您没有指数分支效应,因此跟踪会小得多...

于 2012-09-21T21:56:02.353 回答