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


76

Чи є у вас припущення щодо інструментів для полегшення завдання розуміння коду C / C ++? Ми просто успадкували велику частину програмного забезпечення, написану іншими, і нам потрібно швидко прискорити її. Будь-яка порада щодо інструментів, які можуть спростити це завдання?


14
@casperOne: чому це "не конструктивно" ?! Це корисно кожному ... і конструктивно!
dagnelies

Питання щодо списку покупок @arnaud не є конструктивними. blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping
casper Одне

8
@casperOne: у згаданій вами статті описуються питання щодо рекомендацій щодо придбання обладнання тощо. Безумовно, питання, які слід відхилити. У цьому випадку мова йде про інструменти та техніки вирішення певної проблеми, а саме про допомогу в розумінні великого коду. Я особисто вважаю, що міст між ними досить великий.
dagnelies

@arnaud Вони однакові, тільки тому, що ви не витрачаєте на це гроші або не купуєте їх (а може, і є), не означає, що ви не намагаєтеся вимагати переліку речей. Крім того, неважливо, це апаратне забезпечення, бібліотеки чи інструменти, неможливо об’єктивно вказати, що краще за інше. Дивіться цей мета-допис, щоб отримати додаткову інформацію про те, чому запитання щодо списку не є конструктивними: meta.stackexchange.com/q/138411/140951
casper,

Відповіді:


28

SourceInsight та Understand для C ++ - це найкращі інструменти для аналізу коду c / c ++, включаючи діаграми.


7
Я хочу знати, чи є якісь інструменти для Linux?
Yongqiang Zhou

CppDepend ( cppdepend.com ) генерує графік викликів, графік залежностей з багатьма цікавими функціями, і він працює також для Linux.
Джеймс з команди CppDepend

9

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

Якщо ви можете використовувати Linux, спробуйте KCachegrind


9

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

У черзі ACM є чудова стаття про Spelunking коду, де більше розповідається про використання доксигену та DTrace.


8

Особисто я використовую налагоджувач. Пройдіться по коду і подивіться, що він робить, і куди це відбувається - єдиний шлях.

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


Налагоджувач +1 - це єдиний спосіб зрозуміти код.
Тегірі Ненаші

8
Я вважаю, що спроби зрозуміти велику базу коду, з якою у вас немає досвіду, досить смішні. Спробуйте зробити це на таких проектах, як Clang або Linux. Ви зійдете з розуму. Підходить для коду, з яким я знайомий, або для малих / середніх проектів IMHO.
Чарльз

1
Я прийшов сюди з google, тому що використовую налагоджувач, щоб знайти, де змінити код у величезному проекті без успіху вже чотири дні.
Томаш Зато - відновити Моніку

5

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


4

Doxygen дасть вам діаграми взаємозв’язків класів, якщо ви використовуєте graphviz, навіть якщо ви спеціально до цього не підготувались.


3

Існують деякі інструменти, такі як Єгипет http://www.gson.org/egypt/egypt.html, які працюють, але лише якщо ви відповідаєте очікуваній версії GCC, яка використовується для компіляції коду, і точній версії генератора callgraph. Те саме можна сказати про codeviz http://www.csn.ul.ie/~mel/projects/codeviz/

Інший варіант - valgrind, що використовується в режимі cachegrind (він генерує тип callgraph, за яким ви можете стежити з програми kcachegrind.


1

Я особисто використовую інструменти відладчика Visual Studio.

Він поставляється з функцією "Графік дзвінка", яка дозволить вам візуалізувати речі в коробочках. Також, як правило, все, що мені потрібно, - це Call Stack та звичайні функції годинника


Де знаходиться графік абонента в інструментах відладчика Visual Studio? Я можу знайти лише ієрархію абонентів в інструментах Visual Studio, що не відлагоджують.
Hyunjik Bae


1

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


Графіки дзвінків AQtime іноді дуже яскраві, навіть якщо ви думаєте, що знаєте код.
bk1e

1

Я використовував Borland Together деякий час тому, і він гідно працював над створенням моделей з коду. Я вважаю, що це навіть генеруватиме діаграми послідовностей з коду. Майте на увазі, якщо ваш код безлад, ваша модель теж буде. І, наскільки я пам’ятаю, це недешево, але іноді можна наздогнати особливого.


1

Rational Quantify також представляє приємний графік дзвінків.



0

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


0

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

Коли ви потрапляєте до незрозумілого вам методу чи класу чи змінної, ви просто натискаєте тег, щоб перейти до цього коду, перегляньте його, а потім поверніть назад тег. (це пов’язано з натисканням клавіш, тому це дуже швидко)

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

Заощаджує тонни часу на необхідності йти і з’ясовувати, в якому файлі щось є.


0

doxygen - це безкоштовний інструмент для створення документів (подібний до Javadoc), який також створюватиме графіки взаємозв’язків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.