Как заставить LLDB найти исходный код при создании вариантов Tup?

Что касается этого вопроса, я не могу заставить LLDB отображать фактический исходный код при отладке.

Благодаря принятому ответу на этот вопрос, я проследил проблему до того, как Tup создает варианты (например, отладка, производство и т. Д.):

  1. Работает в подкаталоге для каждого варианта
  2. Он не копирует источник в подкаталог
  3. Он строит все выходы (.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,

Другие вопросы по тегам