Уже не первый раз возникает желание минимальными усилиями глянуть хотя бы на структуру вызовов некоего когда. Мотивация пока-что чистое любопытство. Сразу скажу, что как программист я на текущий момент на уровне начинающего. =)
Первый раз было желание глянуть на структуру вызовов и связность исходников венды взятых по случаю на торрентах.. Поискал бесплатного — не нашел и забил — некогда стало.
Второй раз столкнулся недавно — решил было для развлечения на основе 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++. Прикладные вопросы' — Кодт
Здравствуйте, grey_olli, Вы писали:
_>Доброго времени суток.
_>Уже не первый раз возникает желание минимальными усилиями глянуть хотя бы на структуру вызовов некоего когда. Мотивация пока-что чистое любопытство. Сразу скажу, что как программист я на текущий момент на уровне начинающего. =)
_>Первый раз было желание глянуть на структуру вызовов и связность исходников венды взятых по случаю на торрентах.. Поискал бесплатного — не нашел и забил — некогда стало.
Дружеский совет — начни с более мелкого проекта.
Сверхзадача делает человека импотентом (с) некто умный.
Все-таки Винда — самая большая программа в истории программирования.
Сам Билли Гейц не знает, кк она работает.
По делу — ну я SourceNavigator-ом пользуюсь. Но не советую.
Течёт вода Кубань-реки куда велят большевики.
Re: чем быстро и удобно посмотреть структуру чужого кода?
> Желаемое, в порядке актуальности: > *. иметь возможность посмотреть дерево вызовов задав точку входа в наборе > исходников (просто выбрав c/cpp файл) > *. возможность показывать дерево вызовов на неполном наборе исходников, которые > заведомо не собираются. > *. возможность покрасить в результатах отдельным цветом библиотечные вызовы. > *. возможность скрыть библиотечные вызовы по запросу пользователя, например > шаблоном [строковые операции] или воовсе за кадр. > *. возможность показывать блоки кода (циклы, if/else) и схлопывать/развертывать их.
Многое из этого делает Eclipse + CDP, но это то ещё сооружение.
Я пока пользуюсь им, лучшего не нашёл.
> *. возможность показать блоксхему (в лучшем случае — по ГОСТу).
Ну, об этом и не мечтай, по двум причинам:
-- блоксхемы нужны вообще по жизни только тем, кто составлял эти самые ГОСТы.
Больше они не нужны никому. Соответственно, существует пропорциональный интерес
к их автоматическому изготовлению.
-- Любой реальный алгоритм, более сложный, чем студенческое курсовое задание, в
виде блок-схемы будет неизображаем, по причине большого числа ветвлений и связей.
Posted via RSDN NNTP Server 2.1 beta
Re: чем быстро и удобно посмотреть структуру чужого кода?
Здравствуйте, grey_olli, Вы писали:
_>Первый раз было желание глянуть на структуру вызовов и связность исходников венды взятых по случаю на торрентах.. Поискал бесплатного — не нашел и забил — некогда стало.
Source Insight лучший в этом деле. Но он не бесплатный (впрочем, не более платный, чем те же сорцы винды). Тут советуют Visual Assist — он подойдёт с натяжкой, ибо его основная задача — навигация в своём коде, никаких диаграмм или back references он не покажет.
Re[2]: чем быстро и удобно посмотреть структуру чужого кода?
>> Желаемое, в порядке актуальности: >> *. иметь возможность посмотреть дерево вызовов задав точку входа в наборе >> исходников (просто выбрав c/cpp файл) >> *. возможность показывать дерево вызовов на неполном наборе исходников, которые >> заведомо не собираются. >> *. возможность покрасить в результатах отдельным цветом библиотечные вызовы. >> *. возможность скрыть библиотечные вызовы по запросу пользователя, например >> шаблоном [строковые операции] или воовсе за кадр. >> *. возможность показывать блоки кода (циклы, if/else) и схлопывать/развертывать их.
MZ>Многое из этого делает Eclipse + CDP, но это то ещё сооружение. MZ>Я пока пользуюсь им, лучшего не нашёл.
А можно пример действий в эклипсе (меню-такое-то->в нем туда-то->файл-исходник->мышь-такая-то-кнопка->результат), чтобы получить отдельное удобное окошко внутре которого можно бегать по файлам? Типа задать этот сишник началом и двигать от него. А то я пока видел только доп. окно, которое можно открыть предварительно открыв файл и на наборе исходников с много файлов оно как-то совсем неудобно выглядело — наоткрываешь себе десяток С файлов, к каждому открываешь доп. окно и между ними перемещаешься.. по моему это ужас-ужас. Но я эклипс запускал пару тройку раз пока-то и менюшек там не мало — может я его пока просто готовить не умею? =)
Здравствуйте, 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]: чем быстро и удобно посмотреть структуру чужого кода?
Здравствуйте, qqqqq, Вы писали:
Q>Кстати а как в Source Insight можно посмотреть именно структуру вызовов? Хотелось бы ткнуть в функцию и увидеть дерево
Вроде бы нету, знаю только "Lookup references", покажет простым списком. Ну или почти простым: при помещении курсора в контекстном окошке будет показываться код вызова.