Отладка исполняемых файлов через git commits - PullRequest
0 голосов
/ 18 мая 2018

Кто-нибудь придумал хорошее решение для отладки исполняемых файлов между различными версиями кода с помощью git?По сути, я хочу иметь возможность генерировать параллельные исполняемые файлы между моим недавним набором коммитов и более старым набором коммитов, а также отслеживать соответствующий код для его выполнения без перезаписи всего при переходе между коммитами,

В настоящее время мой метод состоит в том, чтобы сделать / скомпилировать текущий код и переименовать исполняемый файл и любой другой код, который я пытаюсь проанализировать в отладчике (в моем случае это gdb).Теперь, к старому коду, мне нравится извлекать новую ветку перед проверкой старого коммита, потому что я параноик, и он создает reflog для дополнительной безопасности и указаний на проверки (я знаю, что в этом нет необходимости).Я извлекаю старый код и запускаю файл make на старом коммите.Теперь у меня есть свои параллельные исполняемые файлы, которые я могу запустить с помощью gdb.Хотя все это немного утомительно, особенно если изменилось несколько заголовков / файлов (мне нравится разбивать мой код), а также если я теперь хочу внести изменения и перекомпилировать (у меня есть тонны ссылок / включений, и я в основном простопридется начинать процесс заново).У кого-нибудь есть лучший метод?

1 Ответ

0 голосов
/ 18 мая 2018

У меня недавно была похожая проблема при попытке отладки / обновления библиотеки, которую необходимо было правильно установить в системе (используя make install ) и переходить между последней стабильной версией и версией для разработки.

Начиная с версии 2.6.0 (примерно через три года), теперь вы можете использовать

git worktree

. По сути, она позволяет вам превратить любой каталог в любом месте в приложение официального локального gitрепозиторий.Это делается путем заполнения текстового файла .git (вместо обычного подкаталога) на верхнем уровне, содержащего информацию, указывающую на исходный.Со стороны хранилища это приложение объявляется как таковое, и создается новая ветвь.

Следовательно, теперь у вас есть возможность выполнить git checkout одновременно для двух разных ревизий (по одной на рабочий каталог).И вы можете добавить столько приложений, сколько вам нужно.Когда вы закончите, просто удалите все бесполезные приложения, затем вызовите git worktree prune, чтобы заставить его отклонить все, что больше не существует (вы можете использовать git worktree lock, чтобы предотвратить удаление некоторых из них, если каталог их приложений иногда недоступенсо съемными устройствами, например).Это позволит вам скомпилировать две разные версии одного и того же приложения одновременно.

Если, однако, вам нужно получить конкретную ревизию вашей программы, но вы не можете сказать, какая из них перед тем, как скомпилировать ее.вы можете вместо этого использовать

git bisect run

…, который автоматически вызовет скрипт, который сообщит, является ли ревизия хорошей или плохой.Это полезно, когда компиляция довольно длинная, и когда весь поиск может занимать несколько дней.

Вот ссылка на страницу документации , относящуюся к git worktree .

...