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

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


person Dprado    schedule 30.09.2008    source источник
comment
@casperOne: почему это неконструктивно?! Кому-то полезно...и конструктивно!   -  person dagnelies    schedule 31.08.2012
comment
@arnaud Вопросы списка покупок неконструктивны. blog.stackoverflow.com/2010/11/qa-is-hard-lets -за покупками   -  person casperOne    schedule 31.08.2012
comment
@casperOne: в упомянутой вами статье описываются вопросы о рекомендациях по покупке оборудования и так далее. Определенно вопросы, чтобы отклонить. В данном случае речь идет об инструментах и ​​приемах решения конкретной задачи, а именно помощи в понимании большого кода. Лично я нахожу мост между ними довольно большим.   -  person dagnelies    schedule 31.08.2012
comment
@arnaud Они одинаковы, только потому, что вы не тратите на это деньги или не покупаете (или, может быть, вы это делаете), не означает, что вы не пытаетесь запросить список вещей. Кроме того, неважно, аппаратное это оборудование, библиотеки или инструменты, невозможно объективно указать, что лучше другого. Дополнительную информацию о том, почему вопросы списка не являются конструктивными, см. в этом сообщении Meta: meta.stackexchange.com/q/138411/140951   -  person casperOne    schedule 31.08.2012
comment
grok2.com/code_comprehension.html   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 04.07.2015
comment
Потому что это переполнение стека. Здесь каждый вопрос либо не конструктивен, либо глуп, либо закрыт как дубликат. И каждый может отредактировать ваши сообщения, чтобы полностью изменить их смысл, чтобы они могли ответить на вопрос, который вы никогда не задавали, и легче получить несколько баллов.   -  person SasQ    schedule 30.04.2019
comment
Это лучшее место для визуализации кода C для обучения: pythontutor.com/c.html   -  person pavi2410    schedule 09.09.2020


Ответы (16)


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

person aku    schedule 30.09.2008
comment
Я хочу знать, есть ли какие-либо инструменты для Linux? - person Yongqiang Zhou; 19.04.2014
comment
CppDepend(cppdepend.com) генерирует график вызовов, график зависимостей со многими интересными функциями и работает также для Linux. - person James from CppDepend Team; 12.07.2017

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

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

person Thorsten79    schedule 30.09.2008

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

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

person Andy Dent    schedule 26.01.2009

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

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

person gbjbaanb    schedule 30.09.2008
comment
+1 Отладчик - единственный способ понять код. - person Tegiri Nenashi; 13.12.2010
comment
Я нахожу попытки понять большую кодовую базу, с которой у вас нет опыта, довольно смешной. Попробуйте сделать это в таком проекте, как Clang или Linux. Ты сойдешь с ума. Хорошо подходит для кода, с которым я знаком, или проектов малого/среднего размера ИМХО. - person Charles; 01.08.2014
comment
Я пришел сюда из Google, потому что уже четыре дня безуспешно использую отладчик, чтобы найти, где изменить код в огромном проекте. - person Tomáš Zato - Reinstate Monica; 17.09.2015

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

person Community    schedule 01.10.2008

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

person Douglas Mayle    schedule 30.09.2008

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

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

person OldMan    schedule 30.09.2008

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

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

person Eric    schedule 30.09.2008
comment
Где находится Caller Graph в инструментах отладчика Visual Studio? Я могу найти только иерархию вызывающих абонентов в инструментах Visual Studio, не являющихся отладчиками. - person Hyunjik Bae; 15.10.2017

Существует также AspectBrowser, который не очень хорошо работает с Eclipse 3.4. 0

person user23787    schedule 30.09.2008
comment
С Eclipse 4.x не работает и сегодня 2019, а не 2002... :-( - person fk0; 29.10.2019

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

person rec    schedule 30.09.2008
comment
Графики вызовов AQtime иногда очень показательны, даже если вы думаете, что знаете код. - person bk1e; 01.10.2008

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

person Craig Tyler    schedule 30.09.2008

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

person QBziZ    schedule 30.09.2008

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

person rjdthegreat    schedule 30.06.2011

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

person rptony    schedule 30.09.2008

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

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

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

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

person boatcoder    schedule 03.12.2010

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

person luke    schedule 30.09.2008