Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как грамотно читать чужой код?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Управление проектами
elusive
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.

Кода более 200 метров, язык си, исходников около 2500. Я работаю над этим один.

Как грамотно вникать в работу сложой большой софт-системы с несколькими слоями интерфесов, дефайнов, call-back-ов и т.д., получить комплексное представление?
Конспектировать на листочке, рисовать в каком-нибудь visio блок-схемы и наколько подробные? Или есть какие-то специальные удобные программы для этого?

Поделитесь опытом, кто как это делает. Ведь разбираться в чужом коде рано или поздно приходится любому программисту.
ReAl
Почему в чужом? ;-)

doxygen в режиме полного документирования (а не только того, на что написаны doxy-комментарии). Нужно включить в конфигурации.
На выходе разные форматы, будет удобнее всего обычный html с кучей закладок типы/функции/....
Как-то так: http://openocd.sourceforge.net/doc/doxygen/html/index.html

Блок-схем функций не рисует.
AlexandrY
Цитата(elusive @ Dec 19 2012, 05:27) *
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.

Кода более 200 метров, язык си, исходников около 2500. Я работаю над этим один.

Как грамотно вникать в работу сложой большой софт-системы с несколькими слоями интерфесов, дефайнов, call-back-ов и т.д., получить комплексное представление?
Конспектировать на листочке, рисовать в каком-нибудь visio блок-схемы и наколько подробные? Или есть какие-то специальные удобные программы для этого?

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



200 метров?! Дистрибутив линукса, что-ль хотите весь прочитать в исходниках?
Лучше софтины Understand ничего похоже не придумано.
Но и она бысто сдувается когда дело доходит до многоэтажных макросов и динамических драйверов.
Поэтому я обычно использую сразу много тулсов.
Во первых все 2500 файлов скорее всего в каждом конкретном случае не используются.
Тогда удаляются все файлы которые реально не компилируются в проект.
Потом решается что нужно действительно изучать, а что нет. Изучить все 2500 практически нереально.
Потом то что осталось переформатируется в свою привычную разметку.
Скажем я не перевариваю форматироование текстов принятое в опенсорсах под GNU GPL.
Потом для особо сложных текстов делается рефакторинг: убираю макросы, отделяю константы от переменных, переименовываю функции и переменные и т.д.
Особо неприятная вещь в сорсах это наличие жестких и мягких линков(ссылок) на одни и те же файлы но под разными именами в линуксе.
Это чисто наказание, из-за чего под виндой с анализом проектов сделанных под линукс может крыша съехать.
Ну и вот после этого уже усаживаюсь читать.
Но даже этого часто бывает недостаточно. Ну тогда уже надо идти по шагам на целевой платформе с помощью JTAG-а или в симуляторе.
andrew_b
Цитата(AlexandrY @ Dec 19 2012, 12:54) *
Скажем я не перевариваю форматироование текстов принятое в опенсорсах под GNU GPL.
Там принято разное форматирование. Или вы никакое не перевариваете, кроме своего?
ig_z
QUOTE (elusive @ Dec 19 2012, 05:27) *
Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.


Understand и Source Insight. Ничего более удобного для таких задач не встречал. Первый проводит анализ чрезвычайно детально. Но не так удобен для навигации по коду, как второй. SI очень не любит макросы и всякие навороченые исходники с большим количеством условной компиляции. Активно пользуюсь ими уже очень давно. Для карандашного анализа рефакторинга печатаю сырцы из SI.
Думаю, что в этот ряд можно поставить и эклипсу, но мне хватает первых двух.
wangan
подтверждаю Understand офигенная штука, кросплатформенная так как юзает QT
_Pasha
Цитата(wangan @ Dec 19 2012, 13:43) *
подтверждаю Understand офигенная штука, кросплатформенная так как юзает QT

lol.gif под wine всё, что работает - кроссплатформенное.
Victor®
Цитата(wangan @ Dec 19 2012, 12:43) *
подтверждаю Understand офигенная штука, кросплатформенная так как юзает QT


Он как-то лечится?
Victor®
Цитата(uriy @ Dec 22 2012, 20:30) *


beer.gif
In_an_im_di
достаточно понять зачем нужен был этот код и написать быстро свой.
Hellper
вышлите, пожалуйста, кейген на cttf@mail.ru
Dimochka
вышлите и мне пожапуйста кейген на ustu@Rambler.ru
muravei
Цитата(Dimochka @ Jan 6 2013, 17:58) *
вышлите и мне пожапуйста кейген

А лучше положите в "правильное" место.
elusive
Цитата(AlexandrY @ Dec 19 2012, 14:54) *
200 метров?! Дистрибутив линукса, что-ль хотите весь прочитать в исходниках?


Это со всеми (нестандартными) библиотеками для данного проца. Медиаприложение для двух подпроцессоров, с декодерами mpeg2 и mpeg4, аудиодекодерами. Множество интерфейсов и т.д....

Цитата(AlexandrY @ Dec 19 2012, 14:54) *
Но даже этого часто бывает недостаточно. Ну тогда уже надо идти по шагам на целевой платформе с помощью JTAG-а или в симуляторе.


JTAG для данной системы находится в "стадии тестирования" и работает нестабильно, чаще - не работает (
desh
Цитата(ReAl @ Dec 19 2012, 10:45) *
Почему в чужом? ;-)

doxygen в режиме полного документирования (а не только того, на что написаны doxy-комментарии). Нужно включить в конфигурации.
На выходе разные форматы, будет удобнее всего обычный html с кучей закладок типы/функции/....
Как-то так: http://openocd.sourceforge.net/doc/doxygen/html/index.html

Блок-схем функций не рисует.


Блок-схемы не рисует, а вот графы вызовов рисует неплохо, что, может быть, более полезно для больших проектов.
Нужно только подключить к нему Graphviz
elusive
Цитата(desh @ Jan 30 2013, 13:46) *
Блок-схемы не рисует, а вот графы вызовов рисует неплохо, что, может быть, более полезно для больших проектов.
Нужно только подключить к нему Graphviz


Строил граф из него, в папке создал кучу файлов с названиями graph_..., но в html-е так и не нашел кнопку "отобразить граф"! на странице index.html были только ссылки на структуры, типы, функции файлов...
desh
Цитата
и не нашел кнопку "отобразить граф"

хм. если я не ошибаюсь, граф зависимостей отображается в описании функции.
попробуйте поиграть настройками в доксивизарде на вкладке Expert. За графы там отвечает меню Dot
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.