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/