чем быстро и удобно посмотреть структуру чужого кода?
От: grey_olli http://grey-olli.livejournal.com
Дата: 25.01.12 20:14
Оценка:
Доброго времени суток.

Уже не первый раз возникает желание минимальными усилиями глянуть хотя бы на структуру вызовов некоего когда. Мотивация пока-что чистое любопытство. Сразу скажу, что как программист я на текущий момент на уровне начинающего. =)

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

Второй раз столкнулся недавно — решил было для развлечения на основе GNUтого гуевого софта с многопоточностью сделать простенькую GNUтую же софтину для частного случая более удобную и, возможно, без какой-либо многопоточности. Казалось бы — отрезать лишний функционал и добавить десяток-другой строк когда.. но не так-то просто — разбираться в вызовах того что уже понаписано всё равно надо. ) Тут бы и пригодился какой-то не сильно сложный интерфейс.

Желаемое, в порядке актуальности:
*. иметь возможность посмотреть дерево вызовов задав точку входа в наборе исходников (просто выбрав c/cpp файл)
*. возможность показывать дерево вызовов на неполном наборе исходников, которые заведомо не собираются.
*. возможность покрасить в результатах отдельным цветом библиотечные вызовы.
*. возможность скрыть библиотечные вызовы по запросу пользователя, например шаблоном [строковые операции] или воовсе за кадр.
*. возможность показывать блоки кода (циклы, if/else) и схлопывать/развертывать их.
*. возможность показать блоксхему (в лучшем случае — по ГОСТу).

Пока что меня интересуют freeware(gpl/bsd/whatever) продукты, но если вы работали с коммерческими и они стоят не стотыщмульонов (т.е. по цене доступны для средней конторы, а не только для корпораций-монстров) — было бы интересно узнать название рекомендуемой сотфины, порядок стоимости полноценной версии и ваше мнение о полезности.

Есть frama-c, но количество мороки требуемое для того чтобы создать хоть какую-то аналитику равносильно исследованию подробнстей сборки исследуемой софтины на предмет "сконструировать строку с которой в итоге запускается gcc". А всё потому, что frama-c перед анализом подавай результат работы препроцессора, а не просто набор исходников.

Есть splint, но он дает кучу warrning'ов малополезных для упрощения понимания кодобазы (хотя и полезных для исправления ошибок в коде).

Что еще посоветуете?

PS: Так как к ознакомлению может быть взята, например, выложенная в сеть неполная куча чьих нибудь коммерческих сорцов (уже бывало, что на торрентах валялись исходники от m$, semantec, cisco и других), то подход 'сначала скомилируйте в объектники ваши сорцы' является ущербным: имеющийся к препарированию кусок базы кода не обязательно способен собираться отдельно от отсутствующих элементов.

Посмотрел на eclipse — там вроде есть, в первом приближении, то, что мне нужно, но пока не нашел как вывести это удобно в виде отдельного окошка с пробегом по всему имеющемуся коду и можно ли это вообще.

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

Посоветуйте чего путного и полезного? ?-)

26.01.12 13:46: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
--
Bye.Olli.
gpg --search-keys grey_olli
Key fingerprint = 09B6 E060 DD67 04B9 E53B 721B 12E2 7401 F8A4 FC68
Re: чем быстро и удобно посмотреть структуру чужого кода?
От: artem_korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 26.01.12 07:25
Оценка:
http://www.cppdepend.com
С уважением, Artem Korneev.
Re: чем быстро и удобно посмотреть структуру чужого кода?
От: alpha21264 СССР  
Дата: 26.01.12 07:42
Оценка:
Здравствуйте, grey_olli, Вы писали:

_>Доброго времени суток.


_>Уже не первый раз возникает желание минимальными усилиями глянуть хотя бы на структуру вызовов некоего когда. Мотивация пока-что чистое любопытство. Сразу скажу, что как программист я на текущий момент на уровне начинающего. =)


_>Первый раз было желание глянуть на структуру вызовов и связность исходников венды взятых по случаю на торрентах.. Поискал бесплатного — не нашел и забил — некогда стало.


Дружеский совет — начни с более мелкого проекта.
Сверхзадача делает человека импотентом (с) некто умный.
Все-таки Винда — самая большая программа в истории программирования.
Сам Билли Гейц не знает, кк она работает.

По делу — ну я SourceNavigator-ом пользуюсь. Но не советую.

Течёт вода Кубань-реки куда велят большевики.
Re: чем быстро и удобно посмотреть структуру чужого кода?
От: MasterZiv СССР  
Дата: 26.01.12 08:01
Оценка:
> Желаемое, в порядке актуальности:
> *. иметь возможность посмотреть дерево вызовов задав точку входа в наборе
> исходников (просто выбрав c/cpp файл)
> *. возможность показывать дерево вызовов на неполном наборе исходников, которые
> заведомо не собираются.
> *. возможность покрасить в результатах отдельным цветом библиотечные вызовы.
> *. возможность скрыть библиотечные вызовы по запросу пользователя, например
> шаблоном [строковые операции] или воовсе за кадр.
> *. возможность показывать блоки кода (циклы, if/else) и схлопывать/развертывать их.

Многое из этого делает Eclipse + CDP, но это то ещё сооружение.
Я пока пользуюсь им, лучшего не нашёл.

> *. возможность показать блоксхему (в лучшем случае — по ГОСТу).


Ну, об этом и не мечтай, по двум причинам:
-- блоксхемы нужны вообще по жизни только тем, кто составлял эти самые ГОСТы.
Больше они не нужны никому. Соответственно, существует пропорциональный интерес
к их автоматическому изготовлению.
-- Любой реальный алгоритм, более сложный, чем студенческое курсовое задание, в
виде блок-схемы будет неизображаем, по причине большого числа ветвлений и связей.
Posted via RSDN NNTP Server 2.1 beta
Re: чем быстро и удобно посмотреть структуру чужого кода?
От: pik Италия  
Дата: 26.01.12 08:12
Оценка:
Здравствуйте, grey_olli, Вы писали:

http://www.wholetomato.com
Re: чем быстро и удобно посмотреть структуру чужого кода?
От: cppnick  
Дата: 26.01.12 08:48
Оценка: +1
Здравствуйте, grey_olli, Вы писали:

_>Первый раз было желание глянуть на структуру вызовов и связность исходников венды взятых по случаю на торрентах.. Поискал бесплатного — не нашел и забил — некогда стало.

Source Insight лучший в этом деле. Но он не бесплатный (впрочем, не более платный, чем те же сорцы винды). Тут советуют Visual Assist — он подойдёт с натяжкой, ибо его основная задача — навигация в своём коде, никаких диаграмм или back references он не покажет.
Re[2]: чем быстро и удобно посмотреть структуру чужого кода?
От: grey_olli http://grey-olli.livejournal.com
Дата: 26.01.12 16:10
Оценка:
Здравствуйте, MasterZiv, Вы писали:


>> Желаемое, в порядке актуальности:

>> *. иметь возможность посмотреть дерево вызовов задав точку входа в наборе
>> исходников (просто выбрав c/cpp файл)
>> *. возможность показывать дерево вызовов на неполном наборе исходников, которые
>> заведомо не собираются.
>> *. возможность покрасить в результатах отдельным цветом библиотечные вызовы.
>> *. возможность скрыть библиотечные вызовы по запросу пользователя, например
>> шаблоном [строковые операции] или воовсе за кадр.
>> *. возможность показывать блоки кода (циклы, if/else) и схлопывать/развертывать их.

MZ>Многое из этого делает Eclipse + CDP, но это то ещё сооружение.

MZ>Я пока пользуюсь им, лучшего не нашёл.
А можно пример действий в эклипсе (меню-такое-то->в нем туда-то->файл-исходник->мышь-такая-то-кнопка->результат), чтобы получить отдельное удобное окошко внутре которого можно бегать по файлам? Типа задать этот сишник началом и двигать от него. А то я пока видел только доп. окно, которое можно открыть предварительно открыв файл и на наборе исходников с много файлов оно как-то совсем неудобно выглядело — наоткрываешь себе десяток С файлов, к каждому открываешь доп. окно и между ними перемещаешься.. по моему это ужас-ужас. Но я эклипс запускал пару тройку раз пока-то и менюшек там не мало — может я его пока просто готовить не умею? =)
--
Bye.Olli.
gpg --search-keys grey_olli
Key fingerprint = 09B6 E060 DD67 04B9 E53B 721B 12E2 7401 F8A4 FC68
Re: ANN: C templates
От: slay93  
Дата: 26.01.12 20:03
Оценка: +1
Understand for C++
Re[2]: ANN: C templates
От: cppnick  
Дата: 27.01.12 17:54
Оценка:
Здравствуйте, slay93, Вы писали:

S>Understand for C++

На больших проектах (сорцы винды) загибается. Для мелких вполне пойдёт.
Re[2]: чем быстро и удобно посмотреть структуру чужого кода?
От: qqqqq  
Дата: 27.01.12 23:19
Оценка:
Здравствуйте, cppnick, Вы писали:
C>Source Insight лучший в этом деле. Но он не бесплатный (впрочем, не более платный, чем те же сорцы винды). Тут советуют Visual Assist — он подойдёт с натяжкой, ибо его основная задача — навигация в своём коде, никаких диаграмм или back references он не покажет.

Кстати а как в Source Insight можно посмотреть именно структуру вызовов? Хотелось бы ткнуть в функцию и увидеть дерево: сначала все функции, ее вызывающие, а также всех тех, кто их вызывает, и т.д до упора. Все, что есть это либо дерево фунцкций которые она сама вызывает (calls кому это надо вообще?) и ссылки (referenses) на нее, a callers и нет. referenses это не совсем то, что надо, или может он раборает неправильно даже на относительно простом коде. Например если фунцкия вызывается каким-то конструктором, то в дереве все как-то ломается и не все ссылки на конструктор отображаются особенно если с шаблонами. К тому же в режиме ссылок он почему-то показывает и определение функции в классе в H файле, что дает дополнительную ненужную ветвь. Короче, Source Insight выдает до хрена всего , а ты потом сидишь и разбираешься, что это , и наоборот что он потерял. В Visual Assist хоть понятно, что и зачем, хотя конечно и он не идеальный. Еще вот я помню Visual Studio 6.0 были именно callers
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: чем быстро и удобно посмотреть структуру чужого кода?
От: cppnick  
Дата: 29.01.12 21:44
Оценка:
Здравствуйте, qqqqq, Вы писали:

Q>Кстати а как в Source Insight можно посмотреть именно структуру вызовов? Хотелось бы ткнуть в функцию и увидеть дерево

Вроде бы нету, знаю только "Lookup references", покажет простым списком. Ну или почти простым: при помещении курсора в контекстном окошке будет показываться код вызова.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.