Есть ли у вас какие-либо инструменты для облегчения понимания кода 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-ссылки, чтобы увидеть, где эта функция/переменная используется.
Экономит массу времени, прежде чем нужно идти и выяснить, в каком файле находится что-то.