2010-02-09 4 views

ответ

5

Да. Постройте LLVM в режиме без выпуска (по умолчанию). Это занимает немного больше времени, чем сборка релиза, но вы можете использовать gdb для отладки результирующего файла объекта.

Замечание: мне нужно было обновить мой Linux-блок до 3 ГБ памяти, чтобы сделать время отладки режима LLVM разумным.

+0

Но могу ли я отладить пропуск llvm? Пропускания LLVM обычно запускаются с использованием opt, поэтому я не знаю, как использовать gdb для его запуска. Вы можете сказать мне команду? –

+0

Вы можете запустить, например. «gdb/usr/local/bin/opt» и введите «run ». –

+1

http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name

0

После Ричард Penningtons советы + добавление кавычку работает для меня:

gdb /usr/local/bin/opt 

введите

run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null` 

Примечание: (. Не хватает респ) Я бы прокомментировал, но не смог

2

Сначала убедитесь, что LLVM скомпилирован с включенными параметрами отладки, что в основном является настройкой по умолчанию. Если вы не скомпилировали LLVM с параметрами, отличными от параметров по умолчанию, то ваша текущая сборка должна быть прекрасной.

Все пропуски LLVM запускаются с использованием инструмента LLVM opt (оптимизатора). Проходы скомпилируются в файлы общих объектов, то есть LLVMHello.so файл в build/lib, а затем загружаются с помощью инструмента opt. Чтобы отлаживать или проходить через проход, мы должны остановить LLVM до того, как он начнет выполнение файла .so, потому что нет способа разместить точку останова в общем объектном файле. Вместо этого мы можем поместить разрыв в код до, он вызывает пропуск.

Мы собираемся поставить точку останова в llvm/lib/IR/Pass.cpp

Вот как это сделать:

  1. Navigate построить/bin и откройте терминал и введите gdb opt. Если вы скомпилировали llvm с добавленными символами отладки, тогда gdb займет некоторое время, чтобы загрузить отладочные символы, иначе gdb скажет loading debugging symbols ... (no debugging symbols found).

  2. Теперь нам нужно установить точку останова в методе void Pass::preparePassManager(PMStack &) в Pass.cpp. Вероятно, это первый (или один из первых) способов, связанных с загрузкой прохода. Вы можете сделать это, набрав break llvm::Pass::preparePassManager в терминале.

  3. Запуск переваля. У меня есть файл с именем trial.bc битового кода, и тот же самый LLVMHello.so проход, так что я запустить его с

    run -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null 
    

    БГД теперь остановится на Pass::preparePassManager и отсюда на мы можем использовать шаг и следующий, чтобы проследить за выполнением.

+0

Привет, я думаю, что я не добавлял символы отладки при создании LLVM. Могу ли я использовать gdb для отладки? Будет ли это иметь какие-либо ограничения на отладку? – algoProg

+0

Не должно быть никаких проблем. –