
Per generare un backtrace valido accettato dagli sviluppatori di FFmpeg, l'elemento fondamentale è utilizzare il binario non strippato (ffmpeg_g), che conserva i simboli di debug necessari a risalire alla riga esatta di codice sorgente che ha causato il crash.
1.Individua il binario con i simboli di debug (ffmpeg_g):Usa ffmpeg_g anziché il normale binario ffmpeg.
Se hai compilato FFmpeg dai sorgenti, nella cartella di build troverai due eseguibili:
-
ffmpeg: il binario alleggerito da usare in produzione. -
ffmpeg_g: il binario completo con i simboli di debug.
Se usi i pacchetti di distribuzione (es. Ubuntu/Debian): Assicurati di aver installato i pacchetti dei simboli di debug (es.
sudo apt install ffmpeg-dbgsymoffmpeg-debuginfo).
2.Avvia GDB caricando FFmpeg e i relativi argomenti:Passa il comando esatto che genera il problema.
Lancia GDB passando il binario ffmpeg_g e il comando completo racchiuso tra gli argomenti:
Bash
gdb --args ./ffmpeg_g -v 9 -loglevel 99 -i input_corrotto.mp4 -f null -
3.Esegui il programma all'interno del debugger:Digita 'run' nel prompt di GDB.
Al prompt (gdb), avvia l'esecuzione del programma:
Plaintext
(gdb) run
Il processo si fermerà automaticamente non appena si verifica il crash, restituendo un messaggio come Program received signal SIGSEGV, Segmentation fault.
4.Genera il Backtrace avanzato:Esegui i comandi richiesti dagli sviluppatori.
Quando il programma si blocca sul crash, invia i seguenti comandi per ottenere le informazioni su tutti i thread e le variabili locali:
Plaintext
(gdb) thread apply all bt full
Se il crash avviene in un'istruzione di decodifica o filtro specifica, è utili estrarre anche il disassembly della funzione corrente:
Plaintext
(gdb) disassemble
Metodo rapido (Azione singola da riga di comando)
Puoi automatizzare l'intero processo ed esportare il report direttamente in un file di testo .log da allegare a Trac con un unico comando batch:
Bash
gdb -batch \
-ex "run" \
-ex "thread apply all bt full" \
-ex "disassemble" \
--args ./ffmpeg_g -v 9 -loglevel 99 -i input_corrotto.mp4 -f null - > backtrace.log 2>&1
Questo comando esegue FFmpeg in GDB, cattura il crash, estrae lo stack trace di tutti i thread e salva l'output completo all'interno di backtrace.log.
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.