Как заставить LLDB найти исходный код при создании вариантов Tup?
Что касается этого вопроса, я не могу заставить LLDB отображать фактический исходный код при отладке.
Благодаря принятому ответу на этот вопрос, я проследил проблему до того, как Tup создает варианты (например, отладка, производство и т. Д.):
- Работает в подкаталоге для каждого варианта
- Он не копирует источник в подкаталог
- Он строит все выходы (
.o
файлы и сам исполняемый файл) в подкаталоге
Из-за этого LLDB не может найти исходные файлы при отладке.
Итак, мой вопрос: как я могу либо принудить Tup вводить различные пути в процесс сборки, либо сообщить LLDB, что на самом деле происходит?
1 ответ
Мне удалось решить это в двух частях:
1. Получить Туп, чтобы использовать точные пути
Во-первых, чтобы исполняемый файл ссылался на .o
файлы в их фактическом местоположении, Tup должен быть запущен в chroot ( больше информации здесь и в документации). Это делается путем помещения c
после каретки в команде Tup.
Так что мои команды сборки пошли от чего-то вроде
: foreach code/*.cpp |> ^o compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}
в
: foreach code/*.cpp |> ^oc compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}`
Это дало правильные пути в исполняемый файл, но .o
файлы по-прежнему ссылаются на исходные файлы, как если бы они находились в подкаталоге сборки, а не в главном каталоге, что приводит к:
2. Скажите LLDB, где искать источник
Таким образом, LLDB считает, что источник находится на /Users/leo/project/subdirectory/code
но они на самом деле в /Users/leo/project/code
, Это решено в соответствии с этим вопросом, сказав LLDB заменить один путь на другой:
(lldb) settings set target.source-map /Users/leo/project/subdirectory /Users/leo/project
(Похоже, что это не работает с относительными путями, что обидно, так как это означает, что необходимо решение для каждого разработчика. Если кто-то знает решение, которое будет работать независимо от того, где находится проект, дайте мне знать!)
Вы также можете автоматизировать это, имея LLDB исходный файл со следующей строкой: lldb -s path/to/lldb/config/file
,