Ho costruito un frontend di targeting LLVM che produce alcuni IR. Successivamente e del tutto prevedibile, l'output IR non è corretto in alcuni casi (come in, sembra corretto, ma il programma risultante si blocca quando viene eseguito). Tuttavia, non ho trovato molti strumenti utili per affrontare questo.Debug LLVM IR
Ho provato a utilizzare lli, ma l'output del messaggio di errore è incredibilmente inutile (quando si suppone che un interprete possa fornire dettagli di errore molto precisi).
Ho esaminato la conversione del codice IR in C e quindi il debugging con Visual Studio, ma sembra che questa funzionalità sia stata rimossa da LLVM.
Ho anche esaminato GDB. Tuttavia, il formato di informazioni di debug di DWARF è abbastanza specifico per alcuni linguaggi esistenti, e inoltre, la fonte che sto traducendo con il mio frontend è corretta, è l'IR prodotto che è sbagliato, quindi i simboli di debug per la fonte originale non sarebbero essere troppo utile, ad esempio, avrei bisogno di vedere i valori di un gruppo di valori di registro intermedi che non corrispondono a nessuna variabile sorgente o punto di interruzione nelle funzioni generate dal compilatore.
Quali strumenti e tecniche esistono per eseguire il debug dell'output LLVM IR?
Er, in realtà, è # 2. Posso prendere il numero 1 senza troppi problemi adesso. Il programma è molto piccolo, ho ispezionato visivamente molte parti dell'IR e sembrano perfettamente corrette, ma il programma si blocca in fase di esecuzione. Ho anche verificato che il programma sorgente sia corretto. – Puppy
@DeadMG: quindi devi fare una domanda diversa. "Ecco questo piccolo pezzo di LLVM IR e non funziona" e vedere se qualcuno può aiutare. Oltre a questo, presumo che si blocca con 'lli'? Hai provato a compilarlo con 'llc' e vedere cosa viene fuori? Eseguendolo tramite 'opt' con la verifica del modulo? –
'lli' ha effettivamente esito negativo (ovviamente con un messaggio di errore incredibilmente inutile). Ho compilato con 'llc' e ho verificato sia le funzioni che il modulo nel suo complesso. – Puppy