GDB не может найти источник после компиляции через distcc

Я использую несколько машин FreeBSD, и все они в одной версии,

10.3-релиз i386. И установил distcc каждую машину через порты,

/ USR / порты / Devel / Distcc /.

Я думаю, что версия distcc является distcc-3.1 из-за файла distcc-3.1.tar.bz2 в / usr / ports / distfiles /.

Любая компиляция была выполнена очень успешно, даже очень быстро, как я и ожидал.

Но после того, как я попытаюсь установить точку останова в gdb, он не сможет перехватить исходные файлы проекта.

Это может быть результатом временного файла, такого как distccd_xxxxxx.ii, который distcc / distccd дает и получает между компьютерами.

Я пробовал команду 'directory' в gdb, но этого недостаточно, потому что мое дерево файлов слишком сложное и слишком большое.

GDB просто отлично, когда я скомпилировал его локально без distcc.

Есть какие-то решения, чтобы сломать мою ситуацию?

1 ответ

Вы видели запись в distcc FAQ? https://github.com/marksatt/distcc/blob/master/doc/web/faq.html:

К сожалению, это вызвано ошибкой в ​​gcc, которая, я надеюсь, будет исправлена ​​в следующем выпуске. gcc встраивает каталог, в котором был запущен компилятор (cc1), когда он действительно должен записать каталог, из которого получен исходный код.

Сейчас вы можете обойти это, используя команду "directory" в gdb, чтобы указать ему, где найти источник, или передав абсолютное имя файла при компиляции.

У Tim Janik есть неофициальный патч для distcc, который работает вокруг этого, но я думаю, что я не буду объединять его, потому что лучше исправить это в gcc.

Это Debian # 148957.

В списке рассылки gcc-patches было обсуждение этой ошибки.
Это может повлиять на другие программы, которые используют отладочные уколы, такие как addr2line, и это приводит к тому, что объектные файлы не становятся байт-байтовыми, когда они включают в себя исходный каталог. Эта же ошибка влияет на ccache.

Патч, кажется, теперь здесь: http://testbit.eu/~timj/patches/

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