Инструмент для визуализации потока кода (C / C ++) [закрыт]
-
03-07-2019 - |
Вопрос
Есть ли у вас какие-либо предложения инструментов, облегчающих задачу понимания кода на C / C ++?Мы только что унаследовали большую часть программного обеспечения, написанного другими, и нам нужно быстро освоиться с ним.Есть какие-нибудь советы по инструментам, которые могли бы упростить эту задачу?
Решение
Источник информации и Понимать для C ++ это лучшие инструменты, которые вы можете получить для анализа кода на c / c ++, включая блок-схемы.
Другие советы
Программное обеспечение для профилирования дает вам представление о том, какие функции были вызваны.
Если вы можете использовать Linux, попробуйте KCachegrind
Лично я использую отладчик.Пробежитесь по коду и посмотрите, что он делает, и куда он движется - это единственный путь.
Однако вы можете запустить его с помощью некоторых генераторов документации, которые (иногда) помогают.Хорошим примером является доксиген.
Доксиген очень хорош в генерации диаграмм из кода без применения разметки, если вы включите опцию EXTRACT_ALL.Вам нужно Графиквиз установлен для получения диаграмм, сгенерированных с помощью параметра HAVE_DOT.Я обнаружил, что установка его и оставление DOT_PATH пустым отлично работает в Windows, но в OS / X по-прежнему приходится указывать непосредственно на местоположение инструмента dot.
Там есть отличный Расшифровка кода статья в ACM Queue, в которой больше рассказывается об использовании doxygen и DTrace.
KScope, построенный на утилите cscope, если вы используете Linux (KDE).Лучшее, что я когда-либо использовал (и использую постоянно), чтобы разобраться в каком-то огромном фрагменте незнакомого кода, который я должен как-то изменить или какой API я должен использовать для своих нужд.Среди его особенностей - база данных перекрестных ссылок, поиск по которой можно осуществлять множеством способов:вы можете найти все ссылки на символ, его глобальное определение, найти вызывающих функцию и многое другое.У него даже есть встроенная IDE и возможность отображать график вызовов.
Доксиген даст вам диаграммы отношений классов, если вы используете graphviz, даже если вы специально не готовились к этому.
Есть некоторые инструменты, подобные Egypt http://www.gson.org/egypt/egypt.html это сработает, но только если вы соответствуете ожидаемой версии GCC, используемой для компиляции кода, и точной версии генератора callgraph.То же самое можно сказать и о codeviz http://www.csn.ul.ie /~mel/проекты/codeviz/
Другой вариант - valgrind, используемый в режиме cachegrind (он генерирует тип callgraph, который вы можете использовать в программе kcachegrind.
Я лично использую инструменты отладчика Visual Studio.
Он поставляется с функцией "График вызывающих абонентов", которая позволит вам визуализировать содержимое в маленьких коробочках.Кроме того, стек вызовов и обычные функции просмотра - это обычно все, что мне нужно
Есть также Браузер аспектов что не очень хорошо работает с Eclipse 3.4.0
попробуй Время действия, Это инструмент профилирования, который отображает все функции, которые были вызваны (и время, которое это заняло), вы можете установить начальную и конечную точки для анализа.У них есть 30-дневная пробная версия.
Я использовал Борланд Вместе некоторое время назад и он проделал приличную работу по генерации моделей из кода.Я полагаю, что он даже будет генерировать диаграммы последовательностей из кода.Имейте в виду, что если ваш код в беспорядке, то и ваша модель будет такой же.И, насколько я помню, это недешево, но иногда можно поймать что-нибудь особенное.
Rational Quantify также представляет собой хороший график вызовов.
я попробовал инструмент под названием Visustin, который не очень хорош графически, но делает то, что говорит:Блок-схема из кода.http://www.aivosto.com/visustin.html
Doxygen, хорошая вещь в этом заключается в том, что он даст вам знать, насколько уродливым / хорошим является ваш код с точки зрения циклической зависимости классов.Таким образом, вы будете вынуждены переработать свой код, хотя вам это может и не понравиться :-)
Slickedit отлично подходит для навигации по большим блокам кода, которые вы не знаете.Функция тегов позволяет вам работать с кодом на функциональной основе, без необходимости разбираться, в каком файле он находится.(В EMACS на самом деле есть теги, и он ничуть не хуже Slickedit, но с немного более крутой кривой обучения)
Когда вы переходите к методу, классу или переменной, которые вы не понимаете, вы просто нажимаете тег, чтобы перейти к этому коду, просматриваете его, а затем возвращаете тег обратно.(они привязаны к нажатиям клавиш, так что это происходит очень быстро)
Вы также можете использовать find-references, чтобы увидеть, где используется эта функция / переменная.
Экономит массу времени по сравнению с необходимостью идти и выяснять, в каком файле что-то находится.
доксиген это бесплатный инструмент для генерации документов (похожий на Javadoc), который также будет создавать графики отношений.