agosto 26, 2026

Come si usa git bisect in FFmpeg per trovare il commit che ha introdotto un bug?

| No comment

Set up and use ffmpeg in Windows?

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.

Trovato questo articolo interessante? Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook o semplicemente premi "+1" per suggerire questo risultato nelle ricerche in Google, Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie! CONDIVIDI SU!

stampa la pagina

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.

Ultimi post pubblicati

Recent Posts Widget

Archivio

Etichette

Ubuntulandia in Pinterest

Post Più Popolari