Я построил интерфейс LLVM-targetting, который производит некоторый ИК-сигнал. Впоследствии и полностью ожидаемо, IR-выход в некоторых случаях некорректен (как и в, он выглядит корректно, но в результате программа вылетает при выполнении). Однако я не нашел много полезных инструментов для решения этой проблемы.Отладка LLVM IR
Я пробовал использовать lli, но вывод сообщения об ошибке впечатляюще бесполезен (когда вы предполагаете, что интерпретатор может дать очень точные сведения об ошибке).
Я искал преобразование кода IR в C, а затем отлаживал его с помощью Visual Studio, но, похоже, эта функция была удалена из LLVM.
Я также рассмотрел дело с GDB. Тем не менее, формат отладочной информации DWARF весьма специфичен для нескольких существующих языков, и, кроме того, источник, который я переводил с помощью моего интерфейса, верен, это произведенный IR, который является неправильным, поэтому символы отладки для исходного источника не будут 't быть слишком полезным - например, мне нужно будет увидеть значения пучка промежуточных значений регистра, которые не соответствуют какой-либо исходной переменной, или точка останова в сгенерированных компилятором функциях.
Какие инструменты и методы существуют для отладки выходного сигнала LLVM IR?
Er, на самом деле, это # 2. Я могу поймать # 1 без лишних проблем. Программа очень маленькая, я визуально осматривал большинство частей ИК, и они кажутся совершенно правильными, но затем программа вылетает во время выполнения. Я также подтвердил правильность исходной программы. – Puppy
@DeadMG: тогда вы должны задать другой вопрос. «Вот этот маленький кусочек LLVM IR, и он не работает» и посмотрите, поможет ли кто-нибудь. Кроме этого, я предполагаю, что он сработает с 'lli'? Вы пытались скомпилировать его с помощью 'llc' и посмотреть, что получится? Выполнять его через 'opt' с проверкой модуля? –
'lli' действительно терпит неудачу (с эффектно бесполезным сообщением об ошибке, конечно). Я скомпилирован с 'llc', и я проверяю обе функции и модуль в целом. – Puppy