Zbudowałem frontend kierujący LLVM, który produkuje niektóre IR. Następnie i całkowicie oczekiwanie, wyjście IR jest nieprawidłowe w niektórych przypadkach (jak w, wydaje się poprawne, ale wynikowy program zawiesza się po uruchomieniu). Jednak nie znalazłem wielu przydatnych narzędzi do radzenia sobie z tym.Debugowanie LLVM IR
Próbowałem używać Lli, ale komunikat wyjściowy komunikatu o błędzie jest nieprzydatny (kiedy można założyć, że tłumacz może podać bardzo precyzyjne szczegóły błędu).
Szukałem konwersji kodu IR na C, a następnie debugowania tego w Visual Studio, ale wygląda na to, że ta funkcjonalność została usunięta z LLVM.
Zajrzałem również do zajmowania się GDB. Jednak format informacji debugowania DWARF jest dość specyficzny dla kilku istniejących języków, jak się wydaje, a ponadto źródło, które tłumaczę z moim frontendem jest poprawne, to wyprodukowane IR jest błędne, więc symbole debugowania dla oryginalnego źródła nie byłyby prawidłowe nie jest zbyt pomocny - na przykład musiałbym zobaczyć wartości szeregu pośrednich wartości rejestru, które nie odpowiadają żadnej zmiennej źródłowej lub punktowi przerwania w funkcjach generowanych przez kompilator.
Jakie narzędzia i techniki istnieją w celu debugowania wyjścia LLVM IR?
Er, w rzeczywistości jest to # 2. Mogę teraz złapać # 1 bez zbytniego problemu. Program jest bardzo mały, wizualnie sprawdziłem większość części IR i wydaje się, że są one całkowicie poprawne, ale program następnie zawiesza się w czasie wykonywania. Sprawdziłem również, że program źródłowy jest poprawny. – Puppy
@DeadMG: musisz zadać inne pytanie. "Oto mały fragment LLVM IR, który nie działa" i sprawdź, czy ktoś może pomóc. Poza tym, zakładam, że to zawiesza się z 'lli'? Czy próbowałeś skompilować go z 'llc' i zobaczyć, co wyjdzie? Czy jest to możliwe dzięki opcji "opt" z weryfikacją modułu? –
'lli' rzeczywiście nie działa (oczywiście z niepomocnym komunikatem o błędzie). Skompilowałem z 'llc' i weryfikuję zarówno funkcje, jak i moduł jako całość. – Puppy