git bisect utilizza la ricerca binaria nella cronologia Git di FFmpeg per identificare con precisione il singolo commit che ha introdotto una regressione (regression).
1.Inizia la sessione e imposta i punti di riferimento:Definisci il commit funzionante e quello corrotto.
Clona il repository ufficiale di FFmpeg e avvia git bisect, indicando il commit attuale come "bad" e una release precedente nota come "good" (es. il tag n6.1 o un hash specifico):
Bash
git bisect start
git bisect bad # Il commit attuale (master) contiene il bug
git bisect good n6.1 # La versione 6.1 funzionava correttamente
Git calcolerà il numero di passaggi stimati e selezionerà automaticamente un commit a metà strada da testare.
2.Compila la versione di test corrente:Ricompila solo il necessario per accelerare il processo.
Ad ogni passaggio, Git effettuerà il checkout di un commit diverso. Configura e compila il binario locale:
Bash
./configure --disable-doc --disable-htmlpages --disable-podpages --disable-txtpages
make -j$(nproc)
Consiglio per la velocità: Disabilitare la generazione della documentazione (
--disable-doc) riduce notevolmente i tempi di compilazione a ogni ciclo.
3.Testa il comportamento di FFmpeg:Esegui il comando di test per verificare se il bug è presente.
Esegui il comando che genera l'errore sul file di esempio:
Bash
./ffmpeg -i sample.mp4 -f null -
-
Se il comando funziona correttamente:
Bash
git bisect good
-
Se il problema si ripresenta o si verifica il crash:
Bash
git bisect bad
-
Se il codice in quel particolare commit non si compila a causa di un errore intermedio:
Bash
git bisect skip
4.Leggi il risultato e ripristina il branch master:Annota l'hash e ripristina il repository.
Dopo un certo numero di passaggi (solitamente tra 8 e 12 per la cronologia di FFmpeg), Git stamperà a schermo il primo commit responsabile:
Plaintext
0a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t is the first bad commit
commit 0a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t
Author: Developer
Date: ...
avcodec/h264dec: fix memory alignment
Copia l'hash del commit per inserirlo nel report su Trac, quindi chiudi la sessione per tornare al branch originale:
Bash
git bisect reset
Metodo Automatico: git bisect run
Per evitare di ricompilare e testare manualmente a ogni passaggio, puoi automatizzare l'intera ricerca creando uno script Bash (test_bug.sh):
Bash
#!/bin/sh
# 1. Ricompila FFmpeg (se fallisce la build, restituisce codice 125 per fare 'skip')
make -j$(nproc) || exit 125
# 2. Esegui il test: deve restituire 0 se OK, un valore diverso da 0 se fallisce (BAD)
./ffmpeg -v error -i sample.mp4 -f null -
Rendi lo script eseguibile e avvia l'automazione:
Bash
chmod +x test_bug.sh
git bisect start HEAD n6.1
git bisect run ./test_bug.sh
Git eseguirà automaticamente la build e il test in loop fino a trovare il commit esatto senza alcun intervento manuale.
Nessun commento:
Posta un commento
Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.