bugpoint - 自動化測試案例縮減工具

概要

bugpoint [選項] [輸入 LLVM ll/bc 檔案] [LLVM passes] –args 程式參數

描述

bugpoint 縮小 LLVM 工具和 pass 中問題的來源。它可以用於除錯三種類型的失敗:最佳化器崩潰、最佳化器造成的誤編譯,或錯誤的原生碼產生(包括靜態和 JIT 編譯器中的問題)。其目標是將大型測試案例縮減為小型且有用的案例。有關 bugpoint 的設計和內部運作,以及使用 bugpoint 的建議的更多資訊,請參閱 LLVM 發行版中的 LLVM bugpoint 工具:設計與使用

選項

–additional-so library

每當測試程式執行時,將動態共享物件library載入到測試程式中。如果您正在除錯依賴非 LLVM 程式庫(例如 X 或 curses 程式庫)才能運行的程式,這非常有用。

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

將測試程式的退出代碼附加到輸出檔案,以便退出代碼的變更被視為測試失敗。預設為 false。

–args program args

–args 之後指定的所有參數都傳遞給測試程式,無論何時執行。請注意,如果任何程式參數以 “-” 開頭,您應該使用

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

緊跟在 –args 選項之後的 “--” 告訴 bugpoint 將任何以 “-” 開頭的選項視為 –args 選項的一部分,而不是 bugpoint 本身的選項。

–tool-args tool args

–tool-args 之後指定的所有參數都傳遞給正在測試的 LLVM 工具(llclli 等),無論何時執行。您應該以下列方式使用此選項

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}

不要運行指定的 pass 來清理和縮減測試程式的大小。預設情況下,當嘗試縮減測試程式時,bugpoint 會在內部使用這些 pass。如果您嘗試在其中一個 pass 中找到錯誤,bugpoint 可能會崩潰。

–enable-valgrind

使用 valgrind 來查找最佳化階段中的錯誤。這將允許 bugpoint 找到由記憶體管理不善引起的其他無症狀問題。

-find-bugs

持續隨機化指定的 pass 並在測試程式上運行它們,直到找到錯誤或使用者終止 bugpoint

-help

印出命令列選項的摘要。

–input filename

開啟 filename 並將測試程式的標準輸入重新導向,無論何時執行,都來自該檔案。

–load plugin

將動態物件 plugin 載入到 bugpoint 本身。此物件應註冊新的最佳化 pass。載入後,該物件將新增新的命令列選項以啟用各種最佳化。要查看新的完整最佳化列表,請將 -help–load 選項一起使用;例如

bugpoint --load myNewPass.so -help

–mlimit megabytes

指定最佳化和程式碼產生的記憶體使用量上限。設定為零以停用限制。

–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 選項一起使用的命令,以執行位元碼測試案例。這對於交叉編譯非常有用。

–compile-command command

此選項定義與 –compile-custom 選項一起使用的命令,以編譯位元碼測試案例。如果檔案 “interesting”,則命令應以失敗退出代碼退出,否則應以成功退出代碼(即 0)退出(這與在 “interesting” 輸入上崩潰相同)。

這對於在不運行任何連結或執行階段的情況下測試編譯器輸出非常有用。要產生縮減的單元測試,您可以將 CHECK 指令新增到測試案例,並以這種形式傳遞可執行 compile-command 腳本的名稱

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

只要 FileCheck 通過,此腳本就會 “失敗”。因此,結果將是通過 FileCheck 的最小位元碼。

–safe-path path

此選項定義要與 –safe-{int,jit,llc,custom} 選項一起執行的命令路徑。

–verbose-errors={true,false}

bugpoint 的預設行為是在找到導致編譯崩潰的縮減測試時印出 “<crash>”。此標誌將崩潰程式的輸出印到 stderr。這有助於確保它是正在追蹤的相同錯誤,而不是也恰好使編譯器崩潰的不同錯誤。預設為 false。

退出狀態

如果 bugpoint 成功找到問題,它將以 0 退出。否則,如果發生錯誤,它將以非零值退出。

參見

opt(1)