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

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

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

  1. Он работает в подкаталоге для каждого варианта
  2. Он не копирует исходный код в подкаталог
  3. Он составляет все выходные данные (.o файлы и сам исполняемый файл) в подкаталоге

Из-за этого LLDB не может найти исходные файлы при отладке.

Итак, мой вопрос: как я могу заставить Tup указать разные пути в процессе сборки или сообщить LLDB, что на самом деле происходит?


person Leo    schedule 08.05.2016    source источник


Ответы (1)


Я смог решить это в двух частях:

<сильный>1. Заставьте Tup использовать точные пути

Во-первых, чтобы исполняемый файл ссылался на .o файлы в их фактическом местоположении, Tup должен запускаться в chroot (подробнее здесь и в документах). Это делается путем помещения c после знака вставки в команде Tup.

Итак, мои команды сборки пошли от чего-то вроде

: foreach code/*.cpp |> ^o compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}

to

: 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.

person Leo    schedule 08.05.2016