bugpoint命令详解

概要

bugpoint [option] [inputfile] [LLVM passes] -*args** *program arguments

描述

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

选项

  • -additional-so library
    无论何时运行,都将动态共享对象library加载到测试程序中。如果要调试依赖于非LLVM库(例如X或curses库)的程序来运行,这将非常有用。

  • -append-exit-code={true,false}
    将测试程序退出代码附加到输出文件,以便更改退出代码,将其视为测试失败。默认为false。

  • -args program args
    将-args之后指定的所有参数传递给测试程序。请注意,如果任何程序args以“ -” 开头,则应使用:

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

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

-tool-args tool args*
将-tool-args之后指定的所有参数传递给测试中的LLVM工具(llc,lli等)。您应该以下列方式使用此选项:

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

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

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

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

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

-disable-{dce,simplifycfg}
不要运行指定的传递来清理并减小测试程序的大小。默认情况下,bugpoint在尝试减少测试程序时会在内部使用这些传递。如果你试图在其中一个传递中找到错误, bugpoint可能会崩溃。

-enable-valgrind
使用valgrind在优化阶段查找故障。这将允许bugpoint找到由内存管理错误导致的其他无症状问题。

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

-help
帮助信息

-input filename
打开文件并重定向测试程序的标准输入,无论何时运行,都来自该文件

-load plug
将动态对象插件加载到bugpoint本身。此对象应注册新的优化过程。加载后,该对象将添加新的命令行选项以启用各种优化。要查看新的完整优化列表,请同时使用-help和-load选项; 例如:

bugpoint --load myNewPass.so -help

-mlimit mb
指定优化和codegen的内存使用量的上限。设置为零以禁用限制

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

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

-safe-{llc,custom}
在调试代码生成器时,bugpoint应该使用指定的代码生成器作为“安全”代码生成器。这是一个已知良好的代码生成器,用于生成“参考输出”(如果尚未提供),并编译程序中从测试用例中排除的部分。这些选项允许您分别选择静态本机代码编译器或自定义命令(请参阅-exec-command)。解释器和JIT后端目前不能用作“安全”后端

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

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

这对于测试编译器输出而不运行任何链接或执行阶段非常有用。要生成简化单元测试,可以将CHECK指令添加到测试用例,并以此形式传递可执行编译命令脚本的名称:
#!/bin/sh
llc "[email protected]"
not FileCheck [bugpoint input file].ll < bugpoint-test-program.s
只要FileCheck通过,此脚本将“失败”。因此结果将是通过FileCheck的最小bitcode。

-saft-path path
此选项使用-safe- {int,jit,llc,custom} 选项定义要执行的命令的路径

-verbose-errors={true,false}

bugpoint的默认行为是在找到崩溃编译的简化测试时打印“<crash>”。此标志将崩溃程序的输出打印到stderr。这对于确保跟踪的错误是相同的,并且不会发生导致编译器崩溃的不同错误。默认为false。

退出状态

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