C / C удаленная компиляция, локальный сеанс отладки с ELF (встроенный, Cortex-M)

#c #c #eclipse

#c #c #eclipse

Вопрос:

Я много пишу на C / C в своем ноутбуке. К сожалению, у двухъядерного ядра есть свои ограничения, когда дело доходит до компиляции, что я часто делаю. но преимущество в том, что я мобильен и могу носить с собой свой отладчик (usb j-link) (и нет, опция ethernet-j-link слишком дорогая).).

У меня есть сервер с 24 ядрами. Я хотел бы использовать сервер для компиляции, а затем скопировать скомпилированные файлы (в основном ELF) на мой локальный компьютер для отладки.

Обе машины используют Ubuntu (Ubuntu Budgie для ноутбука, Ubuntu Server для сервера).

К сожалению, GDB Eclipse (Atollic 8.1) больше не может сопоставлять двоичные адреса с моими исходными файлами в графическом отладчике (понятно).

Мне было интересно, как графический отладчик может сопоставлять адреса с текстом (src). Находится ли эта информация о пути в файле ELF? Если да, то как я могу это исправить, чтобы удаленный скомпилированный двоичный файл мог выполнять отладку на моем ноутбуке?

Комментарии:

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

2. Вы могли бы попробовать использовать distcc

3. @max630 я проверил с помощью md5, это тот же файл. я не пытался использовать тот же путь, хорошая идея. сделает это. Спасибо. Сложно ли встроенному программисту, обладающему некоторыми знаниями в области сетевых технологий, настроить distcc? каков ваш опыт?

4. На самом деле я не использовал distcc ни в одном проекте. Может быть, пытался, я не помню. Я использовал ccache, обычно интеграция таких оболочек с gcc очень проста — вы подставляете CC или какую-либо другую переменную в Makefile. Если вы инженер по встраиванию, вы должны быть знакомы с пользовательскими компиляторами, это не сильно отличается.

Ответ №1:

В gdb вы можете сделать это:

установить заменитель-путь от до

Определите правило замены исходного пути и добавьте его в конец текущего списка существующих правил замены. Если правило с тем же from уже было определено, то старое правило также удаляется. Например, если файл /foo/bar/baz.c был перемещен в /mnt/cross/baz.c, то команда (gdb) set substitute-path /foo/bar /mnt/cross сообщит GDB заменить ‘/foo/bar’ на ‘/mnt/cross’, который позволит GDB найти файл baz.c, даже если он был перемещен. В случае, когда определено более одного правила подстановки, правила вычисляются одно за другим в том порядке, в котором они были определены. Для выполнения замены выбирается первое совпадающее, если таковое имеется. Например, если бы мы ввели следующие команды: (gdb) set substitute-path /usr/src/include /mnt/include (gdb) set substitute-path /usr/src /mnt/src GDB затем переписал бы /usr/src/include/defs.h в /mnt/include/defs.исправлено с помощью первого правила. Однако для перезаписи /usr/src/lib/foo.c в /mnt/src/lib/foo.c будет использоваться второе правило.