Понимание большого, недокументированного набора исходного кода?
Меня всегда удивлял Wine. Иногда я хочу взломать его, исправить мелочи и вообще понять, как это работает. Итак, я загружает исходный код Wine, и сразу после этого я чувствую себя подавленным. Кодовая база огромна и, в отличие от ядра Linux, почти нет инструкций о коде.
Каковы наилучшие методы для понимания такой огромной базы кода?
Ответы
Ответ 1
С сложной базой кода самая большая ошибка, которую вы можете сделать, - это быть компьютером. Получить компьютер для запуска кода и использовать отладчик, чтобы узнать, что происходит.
-
Выясните, как скомпилировать, установить и запустить собственную версию Wine из существующего исходного кода.
-
Узнайте, как отлаживать (например, использовать gdb) в исполняемом экземпляре вашей версии Wine.
-
Запустите Wine под отладчиком и попросите его продемонстрировать нежелательное поведение.
-
Интересная часть: найдите путь прохождения кода и начните изучать, как все это происходит.
Да, чтение большого количества кодов поможет, но компилятор/отладчик/компьютер может работать с кодом намного быстрее, чем вы.
Ответ 2
Профессор однажды сказал нам сравнить такую ситуацию с восхождением на гору. Вы могли бы слушать кого-то, кто сделал это, и рассказывал вам, что ему нравится смотреть в страну. И вы без колебаний верите, что это зрелищное зрелище.
Однако, вы должны начать подниматься на себя, чтобы понять, что такое вид сверху.
И это не так важно, чтобы подняться до самого верха. Это может быть совершенно справедливо, чтобы достичь справедливой высоты над уровнем земли.
Но никогда не бойтесь начинать лазать. Представление всегда стоит никаких усилий.
Это всегда была хорошая аналогия для меня. Я знаю, что этот вопрос касался конкретных советов о том, как эффективно работать с базами кода после того, как вы начали лазать. Но тем не менее он мгновенно напомнил мне о наших классах физики в то время.
Ответ 3
(Это ответ, который я отправил на вопрос некоторое время назад. Я немного изменил его, чтобы соответствовать этому вопросу.)
Опыт показал мне, что при изучении устаревшей системы есть 3 основные цели:
- Узнайте, что должен делать код.
- Узнайте, как он это делает.
- (критически) Узнайте, почему он делает это так, как он делает.
Все три части очень важны, и есть несколько трюков, которые помогут вам начать работу.
Во-первых, не поддавайтесь искушению просто ctrl-click (или независимо от того, что использует ваша среда IDE) по всему коду, чтобы понять все. Вероятно, вы не сможете держать все в своем воображении таким образом, особенно когда каждая строка заставляет вас смотреть на несколько других классов, чтобы понять, что это такое, поэтому вам нужно уметь удерживать несколько уровней стек в голове.
Прочитайте, где это возможно, документацию; это обычно помогает вам быстро получить умственную основу, на которой можно построить все, что следует.
Запускайте тестовые примеры, где это возможно.
Не бойтесь спросить того, кто знает, есть ли у вас вопрос. Разумеется, вы не должны тратить время других на глупые запросы, но если есть что-то, что вы просто не понимаете (это особенно верно в отношении более концептуальных вопросов, таких как: "Разве не имеет смысла делать это как ___" или что-то в этом роде), возможно, стоит выяснить ответ, прежде чем вы что-то порвите и не знаете, почему.
Когда вы, наконец, приступите к чтению кода, начните с логического "основного" места и идите оттуда. Не просто читайте код сверху вниз, либо в алфавитном порядке, или что-нибудь (это, вероятно, очевидно).
Ответ 4
Лучший способ познакомиться с большой кодовой базой - это погрузиться. Многие проекты имеют список простых задач, которые необходимо выполнить, и они обычно зарезервированы для облегчения людей. Вы должны найти и поработать над что-нибудь из этого; вы узнаете много о общих схемах и структуре кода, внесите свой вклад в проект и получите легкий выигрыш, который поможет вам принять более крупные задачи.
Как и большинство проектов, WINE обладает хорошими ресурсами для своих разработчиков; IRC, wiki, список рассылки и руководства/обзоры. С большинством устрашающих кодовых баз это не так страшно после первых нескольких исправлений. WINE поистине большой и, похоже, ядро, я сомневаюсь, что есть какой-либо специалист во всех системах; не чувствую, что тебе тоже нужно быть. Начните работать над чем-то, что имеет для вас значение, и возьмите его оттуда.
Я запустил несколько патчей для WINE, и это хорошее сообщество и хорошая структура. Там очень много полезных сообщений об отладке, и это действительно классный проект, над которым нужно работать, так что это поможет вам еще больше ударить.
Мы все ценим вашу доблесть и готовность помочь с WINE (ей это нужно). Спасибо, и удачи.
Ответ 5
Входите. Подумайте о вопросе, на который вы хотели бы ответить, и попытайтесь найти ответ. Когда вы устанете читать код, прочитайте список рассылки Dev, руководство разработчика или вики.
К сожалению, нет никакого королевского пути к пониманию большой базы кода. Если вам нравятся такие вещи (я знаю), вам нужно развлечься. Если нет, путеводители действительно не помогут, так что вам не намного хуже.
Ответ 6
Посмотрите на одну особенную особенность, которую вы хотите улучшить. Найдите его реализацию. Как только вы его найдете, потяните за эту соломинку, и все остальное последует за ней.
Ответ 7
Лучший способ - это комментарии.
Я ироничен, так как вы понимаете, что маленькие кусочки зверя добавляют комментарии, чтобы вы могли следить за своим тропом.
Другие разработчики также получат удовольствие, если вы добавите недостающие руководства в код.
Ответ 8
Как предложили другие, копайте! Прочтите всю доступную документацию, которую вы можете поглотить. Затем посмотрите, можете ли вы найти других людей, которые заинтересованы или хорошо осведомлены, и учиться с ними/с ними. Это помогает людям отказываться от идей и задавать вопросы.
Для исходного кода C, как только вы почувствуете, в каких областях кода вы хотите работать, сгенерируйте ctags и cscope для этого кода. Эти инструменты значительно облегчают переход и понимание кода. Многие текстовые редакторы (один пример gvim) поддерживают ctags и cscope, поэтому вы можете легко прыгать.
Ответ 9
Попробуйте выполнить небольшое изменение кода, что будет видно вам. Возможно, вы обнаружите работоспособный способ вывода операторов отладки (и выяснения, где будет отображаться выход), это может изменить размер по умолчанию для окон или цвета рабочего стола или что-то еще. Когда вы можете сделать что-то в в кодовой базе, вы поцарапали поверхность понимания и можете начать двигаться к более сложным вещам. В этот момент выберите цель чего-то немного более полезного, что вы хотели бы сделать код, и реализовать это. Или проверьте отслеживание ошибок проекта и найдите что-то маленькое, чтобы начать с.
Документируйте, как вы идете, и записывайте модульные тесты, когда идете, и рефакторируйте, когда идете. Когда вы выясните, что делает процедура, прокомментируйте это!
Ответ 10
(предупреждение: бесстыдный маркетинг впереди)
Для разработчиков Java, использующих Eclipse, nWire. Это плагин Eclipse для навигации и визуализации больших кодовых баз.
Ответ 11
Хороший способ понять большую систему состоит в том, чтобы разбить ее на составляющие части и сосредоточиться на определенных путях через приложение.
Ваш отладчик - ваш друг здесь, установите точку останова в потоке, который вы хотите исследовать, затем пройдите через него по очереди, глядя на то, что каждая часть делает... надеюсь, что помогает...