Минимизация размера отладочной информации для тестирования в удаленном месте

Я пытаюсь создать способ передачи отладочной информации проекта C ++ в удаленное место для тестирования. В текущем цикле разработки небольшие изменения в коде требуют передачи всего двоичного файла (размером 100 с МБ и большей частью отладочной информации).

В настоящее время мой подход к решению этой проблемы заключается в разделении отладочной информации из объектных файлов (размер которой без отладочной информации является управляемым в моем соединении) с использованием -gsplit-dwarf, а затем различий между файлами отладки и копией сборки, которая в настоящее время включена удаленная коробка.

Цель состоит в том, чтобы иметь набор исправлений для файлов отладки проекта, чтобы новый код можно было отлаживать в удаленном месте. Связь между удаленным местоположением и локальным компьютером является медленной, поэтому минимизация размера исправлений имеет первостепенное значение, но она также должна быть сбалансирована со временем работы инструмента. Я рассмотрел bsdiff и xdelta как потенциальные решения и столкнулся с загадкой, где xdetla быстра, но слишком велика, а bsdiff идеальна с точки зрения размера, но время выполнения и требования к памяти немного выше, чем хотелось бы.

Есть ли какой-то инструмент или подход, которого мне не хватает, или я просто ошибаюсь? Может быть, какая-то альтернатива bsdiff и xdelta? Я знаю, что такой инструмент, как gbdserver, не будет работать в этой ситуации из-за некоторых требований, которые мы предъявляем к реальной отладке. Может ли какое-то изменение bsdiff помочь производительности? И действительно, если подход, который я использую, является здравым, то был бы хороший способ сохранить копию сборки на удаленной машине для сравнения.

2

Решение

Самый простой способ — использовать «strip», чтобы скопировать debuginfo в отдельный файл «.debug», а затем снова использовать «strip», чтобы удалить отладочную информацию из исполняемого файла, который вы развернете. Руководство «strip» объясняет, как это сделать, ищите опцию «—only-keep-debug».

После того, как вы это сделаете, вы можете разными способами сообщить gdb об отдельной отладочной информации. Самый лучший способ — использовать функцию «build-id». Это то, что делают современные дистрибутивы Linux. Однако есть и другие способы. В руководстве GDB есть целый раздел об отдельных файлах отладки.

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

Если вы по-прежнему беспокоитесь об уменьшении отладочной информации, даже когда это сделано, вы можете обратиться к инструменту «dwz». Это компрессор DWARF. Однако обычно это имеет значение только в том случае, если вы планируете отправлять отладочную информацию куда-то — дистрибутивы используют ее, чтобы упростить загрузку отладочной информации, но обычные пользователи на самом деле не видят необходимости.

0

Другие решения


По вопросам рекламы [email protected]