bugpoint - 自动测试用例缩减工具

摘要

bugpoint [选项] [输入 LLVM ll/bc 文件] [LLVM 传递] –args 程序参数

描述

bugpoint 缩小 LLVM 工具和传递中问题来源的范围。它可用于调试三种类型的故障:优化器崩溃、优化器错误编译或不良的原生代码生成(包括静态和 JIT 编译器中的问题)。它旨在将大型测试用例缩减为小型、有用的测试用例。有关bugpoint的设计和内部工作原理以及使用 bugpoint 的建议的更多信息,请参阅 LLVM 发行版中的LLVM bugpoint 工具:设计和用法

选项

–additional-so

在每次运行测试程序时,将动态共享对象加载到测试程序中。如果您正在调试依赖于非 LLVM 库(例如 X 或 curses 库)才能运行的程序,此功能很有用。

–append-exit-code={true,false}

将测试程序的退出代码附加到输出文件,以便将退出代码的变化视为测试失败。默认为 false。

–args 程序参数

在每次运行测试程序时,将–args之后指定的所有参数传递给测试程序。请注意,如果任何程序参数以“-”开头,则应使用

bugpoint [bugpoint args] --args -- [program args]

–args 之后紧跟的“--”告诉bugpoint将任何以“-”开头的选项视为–args选项的一部分,而不是bugpoint本身的选项。

–tool-args 工具参数

在每次运行时,将–tool-args之后指定的所有参数传递给正在测试的 LLVM 工具(llclli等)。您应按以下方式使用此选项

bugpoint [bugpoint args] --tool-args -- [tool args]

–tool-args 之后紧跟的“--”告诉bugpoint将任何以“-”开头的选项视为–tool-args选项的一部分,而不是bugpoint本身的选项。(请参阅上面的–args。)

–safe-tool-args 工具参数

–safe-tool-args之后指定的所有参数传递给“安全”执行工具。

–gcc-tool-args gcc 工具参数

–gcc-tool-args之后指定的所有参数传递给gcc的调用。

–opt-args opt 参数

–opt-args之后指定的所有参数传递给opt的调用。

–disable-{dce,simplifycfg}

不要运行指定的传递来清理和缩减测试程序的大小。默认情况下,bugpoint在尝试缩减测试程序时会在内部使用这些传递。如果您试图在其中一个传递中查找错误,bugpoint可能会崩溃。

–enable-valgrind

使用 valgrind 查找优化阶段中的错误。这将允许 bugpoint 找到由内存错误管理引起的无症状问题。

-find-bugs

持续随机化指定的传递并在测试程序上运行它们,直到找到错误或用户终止bugpoint

-help

打印命令行选项的摘要。

–input 文件名

打开文件名并将测试程序的标准输入重定向到该文件,无论何时运行。

–load 插件

将动态对象插件加载到bugpoint本身。此对象应注册新的优化传递。加载后,该对象将添加新的命令行选项以启用各种优化。若要查看优化的新完整列表,请将-help–load选项一起使用;例如

bugpoint --load myNewPass.so -help

–mlimit 兆字节

指定优化和代码生成内存使用的上限。设置为零以禁用限制。

–output 文件名

每当测试程序在其标准输出流上产生输出时,它都应与文件名(“参考输出”)的内容匹配。如果您不使用此选项,bugpoint将尝试通过使用“安全”后端编译程序并运行它来生成参考输出。

–run-{int,jit,llc,custom}

每当编译测试程序时,bugpoint都应使用指定的代码生成器为其生成代码。这些选项允许您分别选择解释器、JIT 编译器、静态原生代码编译器或自定义命令(请参阅–exec-command)。

–safe-{llc,custom}

在调试代码生成器时,bugpoint应将指定的代码生成器用作“安全”代码生成器。这是一个已知的良好代码生成器,用于生成(如果未提供)“参考输出”,以及编译程序的那些部分,因为它们已从测试用例中排除。这些选项允许您分别选择静态原生代码编译器或自定义命令(请参阅–exec-command)。解释器和 JIT 后端目前无法用作“安全”后端。

–exec-command 命令

此选项定义要与–run-custom–safe-custom选项一起使用的命令以执行 bitcode 测试用例。这对于交叉编译很有用。

–compile-command 命令

此选项定义要与–compile-custom选项一起使用的命令以编译 bitcode 测试用例。如果文件“有趣”,则命令应以失败的退出代码退出,否则应以成功的退出代码(即 0)退出(这与在“有趣”输入上崩溃时相同)。

这对于在不运行任何链接或执行阶段的情况下测试编译器输出很有用。若要生成简化的单元测试,您可以将 CHECK 指令添加到测试用例中,并以这种形式传递可执行编译命令脚本的名称

#!/bin/sh
llc "$@"
not FileCheck [bugpoint input file].ll < bugpoint-test-program.s

只要 FileCheck 通过,此脚本就会“失败”。因此,结果将是通过 FileCheck 的最小 bitcode。

–safe-path 路径

此选项定义要与–safe-{int,jit,llc,custom}选项一起执行的命令的路径。

–verbose-errors={true,false}

bugpoint 的默认行为是在找到导致编译崩溃的简化测试时打印“<crash>” 。此标志将崩溃程序的输出打印到 stderr。这有助于确保正在跟踪的是相同的错误,而不是碰巧也导致编译器崩溃的其他错误。默认为 false。

退出状态

如果bugpoint成功找到问题,它将以 0 退出。否则,如果发生错误,它将以非零值退出。

另请参阅

opt(1)