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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

В ACM Queue есть отличная статья Code Spelunking, в которой больше говорится об использовании doxygen и DTrace.

Ответ 4

Лично я использую отладчик. Пропустите код и посмотрите, что он делает, и где его движение является единственным способом.

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

Там также AspectBrowser, который не очень хорошо работает с Eclipse 3.4.0

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

Ответ 16

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

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

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

Экономит массу времени, прежде чем нужно идти и выяснить, в каком файле находится что-то.