Инструмент для визуализации потока кода (C/с++) [закрыт]


есть ли у вас какие-либо sugestions инструментов, чтобы облегчить задачу понимания кода C/C++? Мы просто унаследовали большой кусок программного обеспечения, написанного другими, и нам нужно быстро получить до скорости на нем. Любые советы по инструментам, которые могут упростить эту задачу?

16 65

16 ответов:

SourceInsight и понять для C++ являются лучшими инструментами, которые вы можете получить для анализа кода c/C++, включая блок-схемы.

профилирование программного обеспечения дает вам представление о том, какие функции были вызваны.

Если вы можете использовать Linux, попробовать KCachegrind

Doxygen очень хорошо генерирует диаграммы из кода без применения разметки, если вы включите опцию EXTRACT_ALL. Вам нужно GraphViz установлен для получения диаграмм, созданных с помощью параметра HAVE_DOT. Я нахожу, что он установлен и оставляет пустой DOT_PATH отлично работает на Windows, но на OS/X постоянно нужно указывать непосредственно на местоположение инструмента dot.

отличный Код Spelunking статья в очереди ACM, которая говорит больше об использовании Doxygen и DTrace.

лично я использую отладчик. Запустите код и посмотрите, что он делает, и куда он идет-это единственный способ.

однако вы можете запустить его через некоторые генераторы документации, которые (иногда) помогают. Хорошим примером является помощи Doxygen.

KScope, построенный на утилите cscope, если вы находитесь на linux (KDE). Лучшее, что я когда-либо использовал (и использую все время), чтобы погрузиться в какой-то огромный кусок незнакомого кода, который я должен каким-то образом изменить или какой API я должен использовать для своих нужд. Среди его особенностей-база данных перекрестных ссылок, которую можно искать множеством способов: вы можете найти все ссылки на символ, его глобальное определение, найти вызывающих/вызываемых функций и многое другое. Он даже имеет встроенный IDE и способность чтобы показать график вызовов.

Doxygen даст вам диаграммы отношений классов, если вы используете graphviz, даже если вы специально не готовились к нему.

есть некоторые инструменты, такие как Египет http://www.gson.org/egypt/egypt.html это работает, но только если вы соответствуете ожидаемой версии GCC, используемой для компиляции кода и точной версии генератора callgraph. То же самое можно сказать и о codeviz http://www.csn.ul.ie / ~mel / проекты / codeviz/

другой вариант valgrind используется в режиме cachegrind (он генерирует тип callgraph, который вы можете следовать из программы kcachegrind.

Я лично использую средства отладчика Visual Studio.

Он поставляется с функцией" Caller Graph", которая позволит вам визуализировать вещи в маленьких коробках. Также стек вызовов и обычные функции часов, как правило, все, что мне нужно

там же AspectBrowser что не очень хорошо работает с Eclipse 3.4.0

попробовать AQtime, это инструмент профилирования, который отображает все функции, которые вызывали (и время), вы можете установить начальную и конечную точки для анализа. У них есть 30-дневная пробная версия.

Я Борланд Вместе некоторое время назад, и он сделал приличную работу по созданию моделей из кода. Я считаю, что он даже будет генерировать диаграммы последовательности из кода. Имейте в виду, если ваш код беспорядок ваша модель будет тоже. И насколько я помню это не дешево, но иногда можно поймать специальные.

Rational Quantify также представляет собой хороший график вызовов.

Я попробовал инструмент с именем Visustin, который не очень хорош графически, но делает то, что он говорит: Блок-схема из кода. http://www.aivosto.com/visustin.html

Doxygen - Это бесплатный инструмент для создания документов (похожий на Javadoc), который также будет создавать графики отношений.

Doxygen для документирования, хорошая вещь об этом является это позволит вам знать, мотыга некрасиво/хорош ваш код с точки зрения циклических зависимостей классов. Таким образом, вы будете вынуждены пересмотреть свой код, хотя вам это может не понравиться: -)

Slickedit отлично подходит для навигации по большим блокам кода, которые вы не знаете. Функция тегов позволяет вам работать с кодом на функциональной основе, не имея дела с тем, в каком файле он находится. (EMACS на самом деле имеет теги и каждый бит так же хорош, как Slickedit, но с немного более крутой кривой обучения)

когда вы добираетесь до Метода или класса или переменной, которую вы не понимаете, вы просто нажимаете тег, чтобы перейти к этому коду, просмотрите его, а затем поп-тег обратно. (те, кто обязаны нажатия клавиш, так что это очень быстро)

вы также можете использовать find-references, чтобы увидеть, где эта функция/переменная используется.

экономит массу времени на том, чтобы пойти и выяснить, в каком файле что-то есть.