agosto 19, 2026

Come si usa Valgrind con FFmpeg per identificare problemi di memoria da allegare a un bug report?

| No comment

c - valgrind showing memory leaks. how do i stop the leak? - Stack Overflow

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
  1. Non incollare l'intero log nel corpo del testo del ticket se supera le poche decine di righe.

  2. Carica il file valgrind.log generato come allegato (Attach file) alla pagina del ticket.

  3. Nel testo del ticket, incolla solo il blocco di codice relativo alla prima eccezione/errore riscontrata da Valgrind.

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