Можно ли отладить пропуск llvm с помощью gdb? Я не мог найти никаких документов на сайте llvm.Отладка llvm pass с gdb
ответ
Да. Постройте LLVM в режиме без выпуска (по умолчанию). Это занимает немного больше времени, чем сборка релиза, но вы можете использовать gdb для отладки результирующего файла объекта.
Замечание: мне нужно было обновить мой Linux-блок до 3 ГБ памяти, чтобы сделать время отладки режима LLVM разумным.
После Ричард Penningtons советы + добавление кавычку работает для меня:
gdb /usr/local/bin/opt
введите
run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null`
Примечание: (. Не хватает респ) Я бы прокомментировал, но не смог
Сначала убедитесь, что LLVM скомпилирован с включенными параметрами отладки, что в основном является настройкой по умолчанию. Если вы не скомпилировали LLVM с параметрами, отличными от параметров по умолчанию, то ваша текущая сборка должна быть прекрасной.
Все пропуски LLVM запускаются с использованием инструмента LLVM opt
(оптимизатора). Проходы скомпилируются в файлы общих объектов, то есть LLVMHello.so
файл в build/lib
, а затем загружаются с помощью инструмента opt
. Чтобы отлаживать или проходить через проход, мы должны остановить LLVM до того, как он начнет выполнение файла .so
, потому что нет способа разместить точку останова в общем объектном файле. Вместо этого мы можем поместить разрыв в код до, он вызывает пропуск.
Мы собираемся поставить точку останова в llvm/lib/IR/Pass.cpp
Вот как это сделать:
Navigate построить/bin и откройте терминал и введите
gdb opt
. Если вы скомпилировали llvm с добавленными символами отладки, тогда gdb займет некоторое время, чтобы загрузить отладочные символы, иначе gdb скажетloading debugging symbols ... (no debugging symbols found)
.Теперь нам нужно установить точку останова в методе
void Pass::preparePassManager(PMStack &)
вPass.cpp
. Вероятно, это первый (или один из первых) способов, связанных с загрузкой прохода. Вы можете сделать это, набравbreak llvm::Pass::preparePassManager
в терминале.Запуск переваля. У меня есть файл с именем
trial.bc
битового кода, и тот же самыйLLVMHello.so
проход, так что я запустить его сrun -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null
БГД теперь остановится на
Pass::preparePassManager
и отсюда на мы можем использовать шаг и следующий, чтобы проследить за выполнением.
Привет, я думаю, что я не добавлял символы отладки при создании LLVM. Могу ли я использовать gdb для отладки? Будет ли это иметь какие-либо ограничения на отладку? – algoProg
Не должно быть никаких проблем. –
Но могу ли я отладить пропуск llvm? Пропускания LLVM обычно запускаются с использованием opt, поэтому я не знаю, как использовать gdb для его запуска. Вы можете сказать мне команду? –
Вы можете запустить, например. «gdb/usr/local/bin/opt» и введите «run». –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name