bugpoint - 自動化測試用例簡化工具

語法

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

描述

bugpoint 會縮小 LLVM 工具和 pass 中問題的來源。 它可以用於偵錯三種類型的錯誤:最佳化器崩潰、最佳化器錯誤編譯或錯誤的原生程式碼產生(包括靜態和 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}

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

–enable-valgrind

使用 valgrind 在優化階段查找錯誤。這將允許 bugpoint 發現由記憶體管理不當引起的、原本沒有症狀的問題。

-find-bugs

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

-help

列印命令列選項的摘要。

–input filename

開啟 filename 並將測試程式的標準輸入重定向到該檔案,無論它何時運行。

–load plugin

將動態物件 plugin 載入 bugpoint 本身。這個物件應該註冊新的優化過程。載入後,該物件將新增命令列選項以啟用各種優化。要查看新的完整優化清單,請同時使用 -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 選項一起使用的命令,用於編譯位元碼測試案例。如果檔案「有趣」,則該命令應以失敗退出碼退出;否則,應以成功退出碼(即 0)退出(這與它在「有趣」輸入上崩潰時相同)。

這對於在不運行任何連結或執行階段的情況下測試編譯器輸出很有用。要生成簡化的單元測試,您可以將 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)