Llvm klee check如何验证测试通过或失败?

Llvm klee check如何验证测试通过或失败?,llvm,autotest,klee,Llvm,Autotest,Klee,我已经在读了klee教程。这是非常简单和直接的。但是,当我检查由测试生成的文件时,我没有找到任何文件来告诉我测试是通过还是失败?有两种方法可以验证测试结果 KLEE足够聪明,知道3个测试用例的预期返回值是多少 KLEE只需将返回值转储到文件中的某个位置,开发人员需要自己进行检查 是这样吗?Klee不会向您提供在测试中运行的程序的输出,因为它正在静态分析您的代码(大多数情况下)。所以它实际上并没有运行你的程序,这就是为什么它很快。如果它想运行你的程序,它将花费更多的时间。您只需要自己运行它,看看输

我已经在读了klee教程。这是非常简单和直接的。但是,当我检查由测试生成的文件时,我没有找到任何文件来告诉我测试是通过还是失败?有两种方法可以验证测试结果

  • KLEE足够聪明,知道3个测试用例的预期返回值是多少

  • KLEE只需将返回值转储到文件中的某个位置,开发人员需要自己进行检查


  • 是这样吗?

    Klee不会向您提供在测试中运行的程序的输出,因为它正在静态分析您的代码(大多数情况下)。所以它实际上并没有运行你的程序,这就是为什么它很快。如果它想运行你的程序,它将花费更多的时间。您只需要自己运行它,看看输出是否符合预期


    Klee是一个测试输入生成工具,而不是一个测试用例生成工具。不同之处在于测试用例既有输入又有预期输出。

    KLEE使用LLVM测试基础设施LLVM lit进行单元测试。命令和通过/失败检查以注释形式编写

    以test/Feature/DoubleFree.c为例

    // RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t1.bc
    // RUN: rm -rf %t.klee-out
    // RUN: %klee --output-dir=%t.klee-out %t1.bc 2>&1 | FileCheck %s
    // RUN: test -f %t.klee-out/test000001.ptr.err
    
    int main() {
      int *x = malloc(4);
      free(x);
      // CHECK: memory error: invalid pointer: free
      free(x);
      return 0;
    }