![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 31.07.2016
Сообщений: 25
|
![]()
В этой теме я буду спрашивать про то, в каком софте реализованы те или иные фишки, позволяющие существенно ускорить и облегчить анализ и понимание чужого кода за счет соответствующего его отображения.
1) Какие программы умеют делать свёртку одинаковых (или похожих) кусков кода в макросы/шаблоны. Т.е. операции, обратные разворачиванию макросов (дефайнов) и шаблонов. Просто хотелось бы как-то радикально сокращать размер исходника. Это сделает его более обозримым и простым для изучения. Поясню это на самом простом примере (в реале все сложней). Есть штук 16 файлов. И в каждом из них присутствует фрагмент из 25 строчек: #include <assert.h> ... #include "rfdesitm.h" Хотелось бы чтобы программа просканировала все файлы проекта и заменила эти крупные куски кода на, к примеру, на "inc_files". Вы скажите: задача выеденного яйца не стоит. Юзай "поиск и замену". Или сложи все эти инклюды в один, и замени этот кусок на вызов этого инклюда. Но не все так просто. 1) Нужно чтобы сам исходный код не менялся. Менялось только его отображение в программе. 2) Поиском и заменой можно воспользоваться когда уже знаешь, какие куски повторяются. А если не знаешь? Хотелось бы чтобы программы сама, автоматом, их обнаруживала и предлагала заменить на более короткий дефайн. 3) Нужно чтобы имя дефайна было уникальным, чтобы не произошло коллизии с идентификаторами исходного кода. Т.е. программа должна автоматом проверять вводимые юзером имена дефайнов на уникальность. 4) Нужно искать не только одинаковые куски исходника, но и ПОХОЖИЕ. Которые могут свернуться в макровызовы с параметрами. 5) Чтобы наведя мышку на такой "дефайн" можно было в тултипе увидеть его исходный код, который он заменяет 6) Иногда два куска кода можно «привести к общему знаменателю» т.е. сделать одинаковыми, просто произведя соответствующие преобразования. К примеру, поменяв местами в одном из них строки или ещё что-нибудь. Нужно чтобы программа находила и такие КВАЗИ похожие куски и предлагала юзверю сделать соответствующие преобразования (повторяюсь: сам исходник при этом не должен меняться) или напротив, чтобы юзверь указал «здесь преобразования недопустимы, так как изменится логика работы программы» С чего вообще начинается у вас работа по изучению чужого кода? Рисуете для себя какие-то картинки, диаграммки? Или что? Как Вы разбираетесь в объемном чужом коде? Господа! Неужели никому не приходилось разбираться в больших чужих проектах? Последний раз редактировалось Аватар; 07.09.2016 в 20:28. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Дык в первом сообщении не о том вопрос же.
А как разбираться зависит от ситуации. Документация, вопросы коллеге, история коммитов, поиск/git grep, отладчик (брекпоинты, стек трейс), ...
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 31.07.2016
Сообщений: 25
|
![]()
Нет ни коммитов, ни коллег.
Есть только исходный код |
![]() |
![]() |
![]() |
#4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Напомнило http://bash.im/abyssbest?text=%E6%E0%EB%E5%E5%F8%FC
У меня способ такой - запускаем проект на выполнение, тыкаемся в нём, находим мельчайший (или большой, не суть) косяк, и садимся его исправлять - отлаживаем чуть не от старта приложения пошагово с заходами в подпрограммы, вчитываясь в их текст, и пытаемся так или иначе поправить косяк, пара таких косяков и мы уже неплохо видим проект изнутри. Обязательно ведем репозиторий(и), чтобы можно было помнить о своих правках, и изучать чужие, естественно. если есть команда, то принудить пользоваться. Также желательно организовать схему быстрого (в идеале моментального и нагорячую) деплоя (для накатывания и откатов изменений), правда, с оглядкой на страховку от фейла, для чего можно и развернуть полную копию рабочего окружения с хорошо удостоверяемым фактом того, с какой системой работаете (я выводил заметную надпись в заголовок программы для тестовой системы). |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 31.07.2016
Сообщений: 25
|
![]()
Ну систему контроля версий я поставил (чтоб всегда можно было видеть свои правки)
Настройки студии и венды в целом "законсервировал" с помощью RollBack Rx на случай если начнуться какие-то глюки при сборке проекта. А то сейчас компилиться, а потом, вдруг, перестало. И пойди разберись: "из-за чего?" На другом форуме мне тоже посоветовали ползать по программе отладчиком, чтобы лучше её понять. Что, честно говоря, мне не очень понятно: зачем ползать отладчиком если есть исходный код? Тем более что программа под венды и достаточно объемная. Замучаешься ползать Т.е. никакие тулзы для работы именно с исходным кодом Вы не используете? Я имею в виду тулзы для анализа кода и изменения формы его представления к более простому и понятному обобщенному виду (например в виде диаграмм, или в виде тех же ПСЕВДОмакросов - свернутых кусков кода) Насчет "ползанья отладчиком" по программе. У меня программа под венды, т.е. событийно -ориентированная. Поэтому путь, по которому поползет отладчик, зависит от того, на какие кнопочки юзверь нажмет и куда ткнет мышкой. Чтобы отладить все возможные ситуации при этом - замучаешься пыль глотать Последний раз редактировалось Аватар; 07.09.2016 в 20:28. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Ну с помощью отладчика бывает удобнее (посмотреть стек трейс и значения переменных), причем тут всевозможные ситуации? Для начала можно разобраться с одной ситуацией
![]() Вот еще немного советов: http://programmers.stackexchange.com...rge-code-bases
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 05.09.2016 в 15:23. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 31.07.2016
Сообщений: 25
|
![]()
Попробовал "Source Insight".
Вообщем-то не плохая штука для навигации по большим объемам кода. Но выяснились следующие досадные для меня вещи: Вот они в порядке уменьшения важности для меня 1) Нет фолдинга. Совсем. Это фатальный для меня недостаток. Я не могу свернуть уже изученные части кода (например описания классов на 2-3 экрана) и каждый раз должен мозолить на них глаза и прокручивать их. Это затрудняет ориентацию в коде. 2) Невозможно добавить к идентификаторам свою всплывающую подсказку (Tooltip), в которой я бы написал свои комментарии к идентификатору. Проблема отчасти решается открытием "контекстного окна", в котором отображается исходный код определения данного идентификатора. Но мне было бы удобней, что бы просто в тултипе отображался мой коротенький коммент. Буквально 2-3 слова. Не нужен мне исходный код определения. 3) Нет SPLIT-а окон. Т.е. невозможно разделить окно пополам и его части скролить независимо Я слышал что некоторые Doxygen юсают для получения красивых картинок/диаграмм. Но тут плохо, что придется код "портить"/"замусоривать" внедряя в него Doxigen-комменты специального вида. А "замусоривать" исходный код не хотелось бы Последний раз редактировалось Аватар; 07.09.2016 в 20:28. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 21.07.2008
Сообщений: 40
|
![]()
"Замусоривать" необязательно, Doxygen парсит исходный код и строит красивые картинки и без каких-либо комментов специального вида.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
посоветуйте программу для сравнения листингов кода | Arassir | Общие вопросы по программированию, компьютерный форум | 16 | 06.11.2016 13:52 |
Посоветуйте программу, для добавления кода в документацию | Blondy | Софт | 7 | 23.05.2014 17:39 |
Посоветуйте удобную программу для сохранения кусков кода | tumanovalex | Софт | 5 | 20.06.2013 14:38 |
посоветуйте лучший софт для брута | Иногданаde_dust'e2 | Помощь студентам | 1 | 09.01.2012 04:13 |