2009-03-26 3 views
15

Я всегда удивлялся Wine. Иногда я хочу взломать его, исправить мелочи и вообще понять, как это работает. Итак, я download the Wine source code, и сразу после этого я чувствую себя подавленным. Кодовая база огромна и, в отличие от ядра Linux, почти нет инструкций о коде.Понимание большого, недокументированного набора исходного кода?

Каковы лучшие практики для понимания такой огромной кодовой базы?

ответ

16

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

  1. Опишите, как скомпилировать, установить и запустить собственную версию Wine из существующего исходного кода.

  2. Узнайте, как отлаживать (например, использовать gdb) в исполняемом экземпляре вашей версии Wine.

  3. Запустить Wine под отладчиком и заставить его продемонстрировать нежелательное поведение.

  4. Веселая часть: найдите путь прохождения кода и начните изучать, как все это происходит.

Да, чтение многоголодового кода поможет, но компилятор/отладчик/компьютер может запускать код намного быстрее, чем вы.

4

Вдохните. Задайте вопрос, на который вы хотели бы ответить, и попытайтесь найти ответ. Когда вы устанете читать код, прочитайте список рассылки Dev, developer's guide или the wiki.

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

4

Ищите одну особенную особенность, которую вы хотите улучшить. Найдите его реализацию. Как только вы его найдете, потяните эту соломинку, и все остальное последует за ней.

6

Лучший способ познакомиться с большой кодовой базой - это погрузиться. Многие проекты имеют список простых задач, которые необходимо выполнить, и обычно они предназначены для облегчения людей. Вы должны найти и работать по некоторым из них; вы узнаете много о общих схемах и структуре кода, внесите свой вклад в проект и получите легкий выигрыш, который поможет вам принять более крупные задачи.

Как и большинство проектов, у WINE есть хорошие ресурсы для разработчиков; IRC, wiki, список рассылки и руководства/обзоры. С большинством устрашающих кодовых баз это не так страшно после первых нескольких исправлений. WINE действительно большой и, как ядро, сомневаюсь, что есть какой-либо специалист во всех системах; не чувствую, что тебе тоже нужно быть. Начните работать над тем, что имеет для вас значение, и возьмите его оттуда.

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

Мы все ценим вашу доблесть и готовность помочь с WINE (она нужна). Спасибо, и удачи.

2

Лучший способ - через комментарии. Я иронизирую, поскольку вы понимаете, что крошечные кусочки зверя добавляют комментарии, чтобы вы могли следить за своим тропом. Другие разработчики также получат удовольствие, если вы добавите недостающие руководства в код.

+0

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

1

Хороший способ понять большую систему состоит в том, чтобы разбить ее на составляющие ее части и сосредоточиться на определенных путях через приложение.

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

+0

Whoop - это stnadard, чтобы удалить свой собственный дубликат, если кто-то доберется до него непосредственно перед вами? – ojblass

+0

Я понятия не имею, о чем вы говорите ... – Jon

2

Как другие предложил, копать! Прочтите всю доступную документацию, которую вы можете поглотить. Затем посмотрите, можете ли вы найти других людей, которые заинтересованы или хорошо осведомлены, и учиться с ними/с ними. Это помогает людям отказываться от идей и задавать вопросы.

Для исходного кода C, как только вы почувствуете, в каких областях кода вы хотите работать, создайте базы данных для этого кода ctags и cscope. Эти инструменты значительно облегчают переход и понимание кода.Многие текстовые редакторы (один пример - gvim) имеют поддержку ctags и cscope, поэтому вы можете легко прыгать.

2

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

Документ, как вы идете, и писать модульные тесты, как вы идете, и рефакторинг, как вы идете. Когда вы выясните, что делает рутина, прокомментируйте это!

+0

Я бы предпочел использовать метод отладчика-шага, упомянутый в другом месте, КОГДА я могу. Иногда вы не можете. В этом случае «Килрой был здесь» может быть полезным отчаянием. «Это даже код, который запускается для функции X?» – Roboprog

7

(Это ответ я отправил на вопрос некоторое время назад. Я изменил его немного, чтобы соответствовать этот вопрос.)

Опыт показал мне, что есть 3 основные цели у вас есть при изучении унаследованной системы :

  1. Узнайте, что должен делать код.
  2. Узнайте, как это делается.
  3. (Реально) Узнайте, почему он делает это так, как он.

Все три части очень важны, и есть несколько уловок, которые помогут вам начать работу.

Во-первых, не поддавайтесь искушению просто щелчком ctrl-click (или независимо от того, что использует ваша IDE), чтобы обойти код. Вероятно, вы не сможете держать все в своем воображении таким образом, особенно когда каждая строка заставляет вас смотреть на несколько других классов, чтобы понять, что это такое, поэтому вам нужно уметь удерживать несколько уровней стек в голове.

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

При необходимости проведите тестовые примеры.

Не бойтесь спросить кого-то, кто знает, есть ли у вас вопрос. Конечно, вы не должны тратить время других на глупые запросы, но если есть что-то, чего вы просто не понимаете (это особенно верно в отношении более концептуальных вопросов, таких как: «Разве не было бы более целесообразным реализовать это как ___ "или что-то в этом роде), вероятно, стоит выяснить ответ, прежде чем вы что-то порвите и не знаете, почему.

Когда вы, наконец, приступите к чтению кода, начните с логического «основного» места и идите оттуда. Не просто читайте код сверху вниз, либо в алфавитном порядке, или что-нибудь (это, вероятно, очевидно).

+2

Понимание «whys» является самым сложным - по крайней мере для меня. – George

+0

В такой программе, как WINE, часть «почему» обычно будет «потому что это то, что делает Windows»? –

10

Профессор однажды сказал нам сравнить такую ​​ситуацию с восхождением на гору. Возможно, вы слушаете кого-то, кто это сделал, и рассказывает вам, что значит смотреть в страну. И вы без колебаний верите, что это зрелищное зрелище.

Однако вы должны начать подниматься самостоятельно, чтобы понять, что такое вид сверху.

И не важно, чтобы подняться до самого верха. Это может быть вполне достаточно, чтобы достичь справедливой высоты над уровнем земли.

Но никогда не бойтесь начать лазание. Представление всегда стоит никаких усилий.


Это всегда была хорошая аналогия для меня. Я знаю, что этот вопрос касался конкретных советов о том, как эффективно работать с базами кода после того, как вы начали лазать. Но тем не менее он мгновенно напомнил мне о наших классах физики.

2

(предупреждение: бесстыдная маркетинг вперед)

Для разработчиков Java с помощью Eclipse, есть nWire. Это плагин Eclipse для навигации и визуализации больших кодовых баз.