Есть ли у вас какие-либо предложения инструментов, облегчающих задачу понимания кода C/C++? Мы только что унаследовали большую часть программного обеспечения, написанного другими, и нам нужно быстро освоить его. Любые советы по инструментам, которые могут упростить эту задачу?
Инструмент для визуализации потока кода (C/C++)
Ответы (16)
SourceInsight и Understand for C++ — лучшие инструменты для анализа кода c/c++, включая блок-схемы.
Программное обеспечение для профилирования дает вам представление о том, какие функции были вызваны.
Если вы можете использовать Linux, попробуйте KCachegrind.
Doxygen очень хорошо создает диаграммы из кода без применения разметки, если вы включите параметр EXTRACT_ALL. . Вам необходимо установить GraphViz, чтобы получать диаграммы, созданные с настройкой HAVE_DOT. Я обнаружил, что его установка и оставление пустого DOT_PATH отлично работает в Windows, но в OS / X по-прежнему приходится указывать непосредственно на местоположение инструмента точки.
В ACM Queue есть отличная статья Code Spelunking, в которой больше рассказывается об использовании doxygen и DTrace.
Лично я использую отладчик. Пробегитесь по коду и посмотрите, что он делает и куда он движется — единственный путь.
Однако вы можете запустить его через некоторые генераторы документации, которые (иногда) помогают. Хорошим примером является doxygen.
KScope, построенный на основе утилиты cscope, если вы используете Linux (KDE). Лучшее, что я когда-либо использовал (и использую все время), чтобы вникнуть в какой-то огромный кусок незнакомого кода, который мне нужно как-то изменить или какой API я должен использовать для своих нужд. Среди его функций — база данных перекрестных ссылок, в которой можно искать множеством способов: вы можете найти все ссылки на символ, его глобальное определение, найти вызывающих/вызываемых функций и многое другое. Он даже имеет встроенную IDE и возможность отображать график вызовов.
Doxygen предоставит вам диаграммы отношений классов, если вы используете graphviz, даже если вы специально не подготовились к этому.
Есть несколько инструментов, таких как Египет http://www.gson.org/egypt/egypt.html, которые работают, но только если вы соответствуете ожидаемой версии GCC, используемой для компиляции кода, и точной версии генератора графа вызовов. То же самое можно сказать и о codeviz http://www.csn.ul.ie/~mel/projects/codeviz/
Другим вариантом является valgrind, используемый в режиме cachegrind (он генерирует тип графа вызовов, которому вы можете следовать из программы kcachegrind.
Я лично использую инструменты отладчика Visual Studio.
Он поставляется с функцией «Caller Graph», которая позволит вам визуализировать вещи в маленьких коробках. Кроме того, стек вызовов и обычные функции часов — это, как правило, все, что мне нужно.
Существует также AspectBrowser, который не очень хорошо работает с Eclipse 3.4. 0
попробуйте AQtime. Это инструмент профилирования, который отображает все вызванные функции (и время потребовалось), вы можете установить начальную и конечную точки для анализа. У них пробный период 30 дней.
Некоторое время назад я использовал Borland Together, и он неплохо справлялся с создание моделей из кода. Я считаю, что он даже будет генерировать диаграммы последовательности из кода. Имейте в виду, что если ваш код беспорядок, ваша модель тоже будет. Насколько я помню, это недешево, но иногда можно поймать спец.
Rational Quantify также представляет удобный график вызовов.
я попробовал инструмент под названием Visustin, который не очень хорош в графическом плане, но делает то, что он говорит: блок-схема из кода. http://www.aivosto.com/visustin.html
Doxygen, хорошо, что он даст вам понять, что уродлив/хорош ваш код с точки зрения циклической зависимости классов. Таким образом, вы будете вынуждены реорганизовать свой код, хотя вам это может не понравиться :-)
Slickedit отлично подходит для навигации по большим блокам кода, которые вы не знаете. Функция тегов позволяет вам работать с кодом на функциональной основе, не обращая внимания на то, в каком файле он находится. (На самом деле в EMACS есть теги, и он ничуть не хуже Slickedit, но с немного более крутой кривой обучения)
Когда вы добираетесь до метода, класса или переменной, которую вы не понимаете, вы просто нажимаете тег, чтобы перейти к этому коду, просматриваете его, а затем возвращаете тег обратно. (они привязаны к нажатиям клавиш, так что это очень быстро)
Вы также можете использовать find-references, чтобы увидеть, где используется эта функция/переменная.
Экономит кучу времени, потому что вам не нужно идти и выяснять, в каком файле что-то находится.
doxygen – это бесплатный инструмент для создания документов (похожий на Javadoc), который также позволяет создавать графики отношений.