bugpoint - strumento di riduzione automatica dei casi di test
bugpoint [options] [input LLVM ll/bc files] [LLVM passes] --args program arguments
bugpoint restringe l'origine dei problemi negli strumenti LLVM e passa. Può essere utilizzato per eseguire il debug di tre tipi di errori: arresti anomali dell'ottimizzatore, compilazioni errate da parte degli ottimizzatori o generazione di codice nativo errato (inclusi problemi nei compilatori statici e JIT). Ha lo scopo di ridurre i casi di test di grandi dimensioni a piccoli casi utili. Per ulteriori informazioni sulla progettazione e il funzionamento interno di bugpoint, oltre a consigli per l'utilizzo di bugpoint, vedere Strumento bugpoint LLVM: progettazione e utilizzo nella distribuzione LLVM.
Carica la libreria dinamica di oggetti condivisi nel programma di test ogni volta che viene eseguita. Questo è utile se stai eseguendo il debug di programmi che dipendono da librerie non LLVM (come le librerie X o curses) per essere eseguiti.
Aggiungere il codice di uscita dei programmi di test al file di output in modo che una modifica nel codice di uscita venga considerata un errore del test. L'impostazione predefinita è false.
Passa tutti gli argomenti specificati dopo --args al programma di test ogni volta che viene eseguito. Nota che se qualcuno degli argomenti del programma inizia con un "-", dovresti usare:
bugpoint [bugpoint args] --args -- [program args]
L'opzione "--" subito dopo l'opzione --args indica a bugpoint di prendere in considerazione tutte le opzioni che iniziano con "- " per far parte dell'opzione --args, non come opzioni per il bugpoint stesso.
Passa tutti gli argomenti specificati dopo --tool-args allo strumento LLVM sottoposto a test (llc, lli e così via) ogni volta che viene eseguito. Dovresti usare questa opzione nel modo seguente:
bugpoint [bugpoint args] --tool-args -- [tool args]
Il "--" subito dopo l'opzione --tool-args indica a bugpoint di prendere in considerazione tutte le opzioni che iniziano con "-" come parte dell'opzione --tool-args, non come opzioni del bugpoint stesso. (Vedi --args, sopra.)
Passa tutti gli argomenti specificati dopo --safe-tool-args allo strumento di esecuzione "safe".
Passa tutti gli argomenti specificati dopo --gcc-tool-args all'invocazione di gcc.
Passa tutti gli argomenti specificati dopo --opt-args all'invocazione di opt.
Non eseguire i passaggi specificati per ripulire e ridurre le dimensioni del programma di test. Per impostazione predefinita, bugpoint utilizza questi passaggi internamente quando tenta di ridurre i programmi di test. Se stai cercando di trovare un bug in uno di questi passaggi, bugpoint potrebbe bloccarsi.
Usa valgrind per trovare errori nella fase di ottimizzazione. Ciò consentirà a bugpoint di trovare problemi altrimenti asintomatici causati da una cattiva gestione della memoria.
Casualizza continuamente i passaggi specificati ed eseguili sul programma di test finché non viene trovato un bug o l'utente elimina il bugpoint.
Stampa un riepilogo delle opzioni della riga di comando.
Apri nomefile e reindirizza lo standard input del programma di test, ogni volta che viene eseguito, in modo che provenga da quel file.
Carica l'oggetto dinamico plugin nel bugpoint stesso. Questo oggetto dovrebbe registrare nuovi passaggi di ottimizzazione. Una volta caricato, l'oggetto aggiungerà nuove opzioni della riga di comando per abilitare varie ottimizzazioni. Per visualizzare il nuovo elenco completo delle ottimizzazioni, utilizza insieme le opzioni -help e --load; Per esempio:
bugpoint --load myNewPass.so -help
Specifica un limite massimo per l'utilizzo della memoria dell'ottimizzazione e del codegen. Impostare su zero per disabilitare il limite.
Ogni volta che il programma di test produce un output sul suo flusso di output standard, dovrebbe corrispondere al contenuto di nomefile (l'"output di riferimento"). Se non utilizzi questa opzione, bugpoint tenterà di generare un output di riferimento compilando il programma con il backend "sicuro" ed eseguendolo.
Ogni volta che il programma di test viene compilato, bugpoint dovrebbe generare il codice per esso utilizzando il generatore di codice specificato. Queste opzioni ti consentono di scegliere rispettivamente l'interprete, il compilatore JIT, il compilatore di codice nativo statico o un comando personalizzato (vedi --exec-command).
Durante il debug di un generatore di codice, bugpoint deve utilizzare il generatore di codice specificato come generatore di codice "sicuro". Questo è un noto generatore di codice usato per generare il "reference output" se non è stato fornito, e per compilare parti del programma che sono escluse dal testcase. Queste opzioni ti consentono di scegliere il compilatore di codice nativo statico o un comando personalizzato (vedi rispettivamente --exec-command). L'interprete e i backend JIT non possono attualmente essere utilizzati come backend "sicuri".
Questa opzione definisce il comando da utilizzare con le opzioni --run-custom e --safe-custom per eseguire il testcase bitcode. Questo può essere utile per la compilazione incrociata.
Questa opzione definisce il comando da usare con l'opzione --compile-custom per compilare il testcase bitcode. Il comando dovrebbe terminare con un codice di uscita di errore se il file è "interessante" e dovrebbe terminare con un codice di uscita di successo (cioè 0) altrimenti (è come se si bloccasse su input "interessanti").
Questo può essere utile per testare l'output del compilatore senza eseguire alcun collegamento o eseguire fasi. Per generare un test unitario ridotto, puoi aggiungere le direttive CHECK al testcase e passare il nome di uno script di comando di compilazione eseguibile in questa forma:
#!/bin/sh llc "$@" not FileCheck [bugpoint input file].ll < bugpoint-test-program.s
Questo script "fallirà" finché FileCheck avrà esito positivo. Quindi il risultato sarà il bitcode minimo che passa FileCheck.
Questa opzione definisce il percorso del comando da eseguire con l'opzione --safe-{int,jit,llc,custom}.
Il comportamento predefinito di bugpoint è stampare "
Se bugpoint riesce a trovare un problema, uscirà con 0. Altrimenti, se si verifica un errore, uscirà con un valore diverso da zero.
opt(1)
Gestito dal team LLVM (https://llvm.org/).
2003-2023, Progetto LLVM