Почему символы отладки теряются в процессе компиляции / компоновки LLVM? - PullRequest
8 голосов
/ 28 февраля 2010

Я написал преобразование LLVM, которое в основном заменяет malloc на охраняемые malloc и некоторые другие вещи.

Я использую clang (или llvm-gcc) для компиляции файла c, чтобы получить файл битового кода (используя опцию -emit-llvm), который содержит отладочную информацию. Они также содержат имена методов, номера строк и т. Д.

После этого я использую opt для обработки этого файла битового кода. Результатом является инструментированный файл битового кода, в котором все еще содержится вся необходимая информация об отладке.

На третьем и последнем шаге, поскольку нам нужны некоторые библиотеки времени выполнения, мы связываем битовый код с некоторыми другими файлами битового кода, используя llvm-gcc, чтобы получить окончательный двоичный файл.

Этот двоичный файл я не могу отладить, так как он не содержит никакой отладочной информации, хотя все связанные файлы битовых кодов содержали их. Единственное, что GDB может сказать мне, в какой функции мы находимся, но нет номеров строк и так далее ...

Буду благодарен за любые подсказки.

1 Ответ

1 голос
/ 05 июля 2015

Как я понял, вы выполняете оптимизацию (инструмент opt также оптимизирует код и отладочную информацию). Так может ли отсутствующая часть, которую вы хотите увидеть, когда отладка является результатом оптимизированной отладочной информации?

P.S. Я бы добавил это в комментарии, но, к сожалению, у меня нет 50 репутаций, необходимых для добавления комментария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...