
Valgrind (in particolare il tool Memcheck) viene utilizzato per rilevare accessi non validi alla memoria (come buffer overflow, use-after-free, e letture da memoria non inizializzata) o memory leak.
Come per GDB, è fondamentale eseguire Valgrind sul binario non strippato con simboli di debug ffmpeg_g.
1.Verifica la disponibilità di ffmpeg_g:Memcheck richiede simboli non strippati per indicare file e righe di codice.
Assicurati di disporre dell'eseguibile di debug ffmpeg_g. Se stai compilando dai sorgenti, disabilita le ottimizzazioni del compilatore per avere un report più accurato:
Bash
./configure --enable-debug=3 --disable-optimizations --disable-stripping
make -j$(nproc)
2.Esegui Valgrind con i flag raccomandati:Attiva il tracciamento completo delle origini di allocazione.
Lancia Valgrind con i flag per la ricerca dei leak e il tracciamento delle variabili non inizializzate, reindirizzando l'output su un file di log:
Bash
valgrind --tool=memcheck \
--leak-check=full \
--show-leak-kinds=all \
--track-origins=yes \
--log-file=valgrind.log \
./ffmpeg_g -i input_corrotto.mp4 -f null -
3.Disattiva le istruzioni Assembly (Opzionale):Disabilita le ottimizzazioni SIMD/ASM se generano falsi positivi.
Le istruzioni assembly vettoriali (AVX/SSE) usate da FFmpeg per le prestazioni possono talvolta generare falsi positivi in Valgrind o rendere opaca la lettura dello stack trace. Per forzare FFmpeg a usare solo il codice C puro, aggiungi l'opzione -cpuflags 0:
Bash
valgrind --tool=memcheck --leak-check=full --track-origins=yes --log-file=valgrind.log \
./ffmpeg_g -cpuflags 0 -i input_corrotto.mp4 -f null -
Cosa cercare nel file valgrind.log
Prima di allegare il file al ticket su Trac, controlla che siano presenti errori critici come i seguenti:
-
Accessi non validi in lettura o scrittura:
Plaintext
==12345== Invalid read of size 4 ==12345== at 0x123456: h264_decode_frame (h264dec.c:1024) ==12345== Address 0x7fe1234 è 0 byte dopo un blocco allocato di dimensione 1024 -
Uso di valori non inizializzati:
Plaintext
==12345== Conditional jump or move depends on uninitialised value(s) ==12345== at 0x654321: ff_h264_filter_mb (h264_loopfilter.c:120) ==12345== Uninitialised value was created by a stack allocation -
Memory Leak a fine esecuzione:
Plaintext
==12345== LEAK SUMMARY: ==12345== definitely lost: 4,096 bytes in 1 blocks ==12345== indirectly lost: 16,384 bytes in 4 blocks
Come allegarlo a Trac FFmpeg
-
Non incollare l'intero log nel corpo del testo del ticket se supera le poche decine di righe.
-
Carica il file
valgrind.loggenerato come allegato (Attach file) alla pagina del ticket. -
Nel testo del ticket, incolla solo il blocco di codice relativo alla prima eccezione/errore riscontrata da Valgrind.
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.