Ідіть прямо, щоб завантажити Натисніть тут , щоб прочитати білоруський переклад (була надана
Webhostingrating )
На певному етапі кар'єри в програмуванні кожного, вони повинні будуть читати через багато коду, написаного іншим програмістом. Важливою частиною програми розуміння будує картину того, як програма побудована з високорівневе подання і виклику графіки можуть бути неоціненну допомогу при створенні цієї piecture. Це особливо корисно, якщо вихідний програміст використовує зрозумілі імена функцій.
Даний проект надає можливість генерувати графів виклику, щоб допомогти завдання розуміння коду. Він використовує високо модульний набір методів збору і може бути адаптована для підтримки будь-якої мови, хоча тільки C і C + + в даний час підтримуються. Кожна колекція метод має свої переваги і недоліки.

Викличте графік alloc_pages () в ядрі Linux 2.6.12-rc2
gengraph-е alloc_pages-й 5-трет-х років "buffered_rmqueue out_of_memory try_to_free_pages numa_node_id"-я "cpuset_zone_allowed" - вихід-шрифт Arial = - вихід типу = PNG
Установка Тар-zxvf codeviz-1.0.3.tar.gz кд codeviz-1.0.3. / Налаштувати & & & & зробити зробити установку
Це дозволить налаштувати codeviz для використання з виправлену версію компілятора GCC 3.4.1 та встановити всі скрипти.
Додаткова Залежності Графіки відображаються з використанням точка, яка є частиною проекту GraphViz. Встановіть пакет для вашого дистрибутива, або отримати її прямо з наступних приблизний список пакетів, які повинні бути встановлені;
- GraphViz (обов'язково). Завантажити http://www.graphviz.org/ , якщо він не в поставку компакт-диска
- На Mandrake, вам потрібно встановити Perl-DB_File-1 ,806-1mdk пакета. Якщо ви отримуєте повідомлення про DB_File.pm, необхідно еквівалент пакет з вашого дистрибутива
Сценарії| genfull | Використовуйте його для створення повної граф викликів для проекту. Це буде досить великий і, ймовірно, повинні бути pareed вниз з gengraph. Число дату збору методи доступні, але cdepn за замовчуванням. Виконати genfull - чоловік, щоб отримати повну сторінку людини. Не треба покласти вихід full.graph через точку собі, як це навряд чи може бути винесене протягом розумного періоду часу |
| gengraph | Це створить невеликий подграфа і приписка файл для даного набору функцій. Виконати gengraph - чоловік для отримання повної інформації |
Створення cdepn Файли для genfull
Якщо full.graph на джерело вас цікавить вже створені, ви можете пропустити цей розділ. Престол. / Графіки, щоб побачити, якщо full.graph доступна.
Cobjdump і cppobjdump (для C і C + + відповідно) буде генерувати адекватні графів виклику, але інформація трохи не вистачає. Наприклад, вихідний файл оголошенні функції невідомий і макроси і вбудовані функції будуть повністю відсутня. В ідеалі, метод cdepn повинні бути використані, але це вимагає виправлену версію GCC і G + +, щоб працювати. Патчів і деякі скрипти доступні в компіляторах / каталог. GCC 3.0.4 автоматично завантажується і пропатчен для вас, як частина налаштування & & зробити так, якщо, якщо ви використовували, що пропустити залишок цього розділу, якщо хочете.
Виправлену версію GCC і G + + виходів. Cdepn файли для кожного С і С + + файл, скомпільований. Це. Cdepn файл містить інформацію, наприклад, виклик функції, де вони були оголошені і так далі. У версіях CodeViz до 1.0.3, три версії GCC були підтримані: 2.95.4, 3.0.4 та 3.2.3. Для останніх версій, тільки 3.4.1 підтримується, як вона повинна бути здатна скласти будь-якої програми. Було важко протестовані з Linux Kernel так C підтримка повинна бути тонкою. C + +, підтримка також там, але не була випробувана, як широко. Звіти вітаються.
У випадку якщо Ви не хочете використовувати скрипт конфігурації, це, як встановити компілятор самостійно. По-перше, джерелом смоли повинен бути завантажений. Для тих, хто більш важливі справи, ніж читати GCC встановити документ, просто зробити наступне
кд компілятори ncftpget ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.1/gcc-3.4.1.tar.gz ./install_gcc-3.4.1.sh
Цей сценарій буде розархівувати GCC, патч і встановити його на поставляється шляху. Якщо шлях не вказаний, вона буде встановлена в $ HOME / GCC-графа. Я як правило, встановлюють його в / USR / місцеві / GCC-граф з
./install_gcc-3.4.1.sh / USR / місцеві / GCC-граф
Якщо ви серйозно хочете, щоб виправити вручну, щойно прочитав сценарій, як вона проходить через кожен крок по одній за раз.
Поки ми будемо припускати, виправлену версію GCC і G + + перебуває зараз в $ HOME / GCC-графік /. Більшість проектів буде використовувати змінну CC для прийняття рішення, яку версію GCC для використання. Найбільш зручний спосіб використовувати пропатчен один щось на зразок
зробити CC = $ HOME / GCC-графа / Bin / GCC CXX = $ HOME / GCC-графа / бен / г + +
Або ж, налаштувати свій шлях, що GCC-граф постане перед нормальними GCC. Оскільки кожен вихідний файл компілюється, відповідний файл cdepn буде створений.
У разі побудови ядра Linux, команди будуть;
зробити CC = $ HOME / GCC-графа / Bin / GCC bzImage зробити CC = $ HOME / GCC-графа / Bin / GCC модулів
Подібні методи будуть працювати і для інших проектів, вважаючи, що використовує Makefile CC і CXX макроси правильно вказати компілятор для використання. Якщо це Makefile власного типу або не використовується належним макросів, ви можете відредагувати Makefile самостійно, або налаштувати ваш шлях поставити GCC-графа в першу чергу. Наприклад, удар, наступний буде працювати.
PATH = $ HOME / GCC-графа / бен: $ PATH
При будівництві, подивитися висновок компілятора, щоб переконатися. Cdepn файли створюються.
Створення nccout файли для genfull
Альтернативою використанню виправлену версію GCC є використання NCC (http://freshmeat.net/projects/ncc), який є компілятором C, спеціально призначених для коду перегляду. Він поставляється зі своїм власним інструментом навігації і добре варто перевірити.
CodeViz підтримує NCC з CNCC метод збору (як cdepn призначений для використання з GCC) і підтримує тільки C. Дійсно велика річ, що йде на метод збору NCC те, що він може пройти покажчиків на функції. Якщо ви завантажуєте і встановлюєте NCC, використовуйте CNCC метод збору, якщо це C код і покажчики на функції є спільними.
Після NCC встановлено, у разі побудови ядра Linux, команди буде виглядати так:
косметику я CC = bzImage "NCC-ncoo-ncfabs" косметику я CC = модулів NCC-ncoo-ncfabs "знайти. Ім'я-\ *. nccout | xargs кішка> code.map.nccout
Створення full.graph
Деякі full.graph файли надаються з дьогтю в розділі завантажень. Якщо ви хочете ні, читайте далі.
Щоб створити full.graph, сценарій genfull використовується. запустити genfull - допомога, щоб побачити всі варіанти, але найпростіше зробити, це запустити сценарій без аргументів на каталог верхнього рівня вхідного сигналу після компіляції і файл full.graph буде створено в каталозі верхнього рівня вхідного сигналу.
Хоча це має бути можливим поставити full.graph хоча точки і побачити приписку файлів, ми рекомендуємо це не спробувати. Повний графік надзвичайно велика і навряд чи буде винесено в розумні терміни. Один дійсно повинні використовувати програму gengraph, щоб створити менші графіки.
Проблеми, які можуть існувати з full.graph
У більш складний код, full.graph не може бути досконалим. Наприклад, можуть бути конфлікти імен, де є повторювані імена функцій між модулями або, якщо є кілька бінарних файлів, що складається, genfull не будемо робити відмінності між ними. Якщо ви думаєте, це буде проблемою, є два кроки ви можете зробити.
По-перше, порівняти графік породжених cdepn з породженої cobjdump. Як cobjdump аналізує двійковий, дуже малоймовірно, графік не так, він просто не буде мати інформацію про вбудовані функції або макроси. З ядром Linux, цей тест буде виглядати приблизно так
genfull-г-о cobjdump full.graph-objdump genfull-г-о cdepn full.graph-cdepn gengraph-т-г 5-г-full.graph objdump-е kswapd-о-kswapd objdump.ps gengraph-т-р 5-г-full.graph cdepn-е kswapd-о-kswapd cdepn.ps
Це створить два full.graphs і двох графів виклику функції kswapd (), який можна було б порівняти, щоб переконатися, графік cdepn є точною. Аналогічний метод може бути використаний для інших проектів.
Друга проблема, яка може мати місце те, де імена функцій дублюються між модулями. У цьому випадку найкращий курс дій полягає у використанні-х років перейти до genfull обмежити якої гілки дерева розглядаються. Наприклад, в ядрі Linux є alloc_pages () в мм / і водіїв / символ / DRM. Якщо один розглядав В. М. поодинці і конфлікти імен як очікується, будуть проблеми, genfull може служити
genfull-х років "включає мм / Linux драйверів / блок arch/i386"
який охоплюватиме більшість функцій, що представляють інтерес. В інших проектах, то вона буде при різних бібліотек зіштовхуються один з одним. Наприклад, при AVIFile, genfull без аргументів створить жахливий безлад. Замість цього-х вимикач повинен бути використаний для створення full.graph для кожної частини проекту. Наприклад, гравець буде графічно за
genfull-х років "гравець"-о full.graph-плеєр
і кожен з бібліотек буде графіку окремо.
Створення виклику Графіки
Сценарій gengraph генерує граф викликів для зазначеної функції на основі full.graph файл. gengraph - чоловік буде надавати всю необхідну інформацію. Найбільш важливі перемикач, слід зазначити,-г, що визначає, який метод збору у використанні. Як тільки скрипт завершує, постскріпт файл буде доступний, які можна переглядати за допомогою будь-якого приписка глядача. За замовчуванням, вихідний файл буде functionname.ps
Якщо це займає багато часу, щоб генерувати граф, як правило, хороша ідея, щоб перший межа, це глибина на щось розумне з-д. Ми візьмемо приклад alloc_pages графічного () з ядром 2.4.20
Крок 1: gengraph-е alloc_pages
Результат: Беручи занадто довго, натисніть Ctrl-C і обмежені деякі розумні глибину, щоб отримати уявлення про те, що відбувається
Крок 2: gengraph-й 10-е alloc_pages
Результат: Вихід граф масивні, в основному з ядром фондових функцій не представляє інтересу. Використовуйте-т вимикач опустити функції, які, як правило, не представляє інтересу. Для інших проектів, редагувати сценарій gengraph і перейти до рядку "суб generate_trimlist", ця функція має список функцій "обробки" с-т перемикач використовується
Крок 3: gengraph-т-р 10-е alloc_pages
Результат: Вихід графік, як і раніше сильний, хоч поглянути на графік показує, що заклик "shrink_cache ()" призводить до масового графіку нижче, що не схоже, це безпосередньо пов'язано з виділення сторінок. Давайте просто показати, що функції, але не перетинати його з ключем-х років
Крок 4: gengraph-т-р 10-х років "shrink_cache"-е alloc_pages
Результат: Графік розмір значно скорочені. Більшість з решти графік включає в себе дві функції "try_to_free_pages_zone ()" і "__free_pages_ok". Ми не будемо перетинати try_to_free_pages_zone () і буде ігнорувати __free_pages_ok () взагалі з-я перемикача
Крок 5: gengraph-т-р 10-х років "shrink_cache try_to_free_pages_zone"-я "__free_pages_ok"-е alloc_pages
Результат: Perfect, показує гарний граф, який ясно показує, що важливі функції по відношенню до щойно виділення сторінок. Пізніше галузей, які не були пройдений в цей графік може бути графічно окремо
Суть в тому, що перший графік, як правило, занадто великі і повинні бути вирубані. Як порівняти її вниз в поєднання досвіду з кодом і здорового глузду. Я знаходжу, це зазвичай допомагає тільки обмежити глибину першого на 4 і почати ігнорування функцій, які, очевидно, не актуальна і пройти їх пізніше. Якщо перелік окремих функцій опускати не ваша річ, використовуйте опцію - шоу-ре або - ігнорувати-ре перемикачів, щоб показати або ігнорувати функцій на основі регулярних виразів.
Демон / Підтримка клієнтів
З великою граф вхід, довга операція для покоління граф викликів є читання вхідного файлу. Для порівняння, для створення невеликих графів на машині авторів, вона займає 4 секунди, щоб читати графік вхідного і 0,1 секунд для генерації вихідного файлу. Щоб вирішити це, gengraph може запускатися як демон, якщо-д (- демон) перемикач не вказаний. Використовуйте-V, якщо ви хочете побачити, що він робить.
gengraph-д-г / usr/src/linux-2.4.20-clean/full.graph
При цьому повертається, демон запущений. Для створення графіка, використовуючи демон, запустіть
gengraph-д-т-г 2-е alloc_pages
Зверніть увагу на використання д-перемикач, який говорить, що gengraph повинні працювати як клієнт демон інстанції. Якщо вам нудно, порівняти різницю в управлінні раз між нормальним gengraph і коли він використовується в якості клієнта :-). Для зупинки демона, виконайте такі дії
луна QUIT> / TMP / codeviz.pipe
і демон зупинки та очищення.
Пост-обробка параметри
Обидва genfull і gengraph підтримують використання пост-procesing кроків. В даний час два підтримуються. Перше використання стека на одній функції. Це x86 конкретних оскільки воно залежить від об'єктних файлів незалежно від методу збору використовується. Це в основному користь Linux ядро як зазвичай додатки можуть розширити свій стек і не потрібно турбуватися про те використання стека стільки ж. Другий модуль показує кумулятивний використання в gengraph між парами функцій. Це дійсно зручно для демонстрації їх використання між системним викликом і нижчого рівня функції для визначення місця, де стек використовується занадто багато. Дивіться документацію для genfull і gengraph для отримання додаткової інформації про використання пост-обробки опцій. Створення графіки для веб
Gengraph тепер придатний для використання CGI скриптів. Для створення GIF висновок замість постфікса, використовуйте параметр-W перемикач. Як ви вибираєте для реалізації до себе, але і те, що я робив, було наступне
- Є CGI скрипт виклику gengraph для виведення GIF в / TMP
- У HTML, у <IMG SRC = / cgi-bin/readgif? Output.gif &gr; Де output.gif насправді деякі тимчасові файли в / TMP створені CGI-скрипт з унікальним ім'ям і readgif це просто виконується в якому йдеться GIF-зображення с / TMP і потім від'єднує їх.
Існує не демо цього доступні, тому що веб-сервер в якому знаходиться цей проект трохи завантажені. Хоча я міг би запустити демо, моя популярність займе трохи вм'ятина.
Різні замітки
GCC 2.95.3, GCC 3.2.3, C + +, підтримка і зворотній графи викликів у * не * бути ретельно протестовані. Звіти успіху або невдачі, особливо з C + +, використовуючи будь-який з методів збору вітаються. GCC 3.2.3 не рекомендується, якщо ви дійсно повинні використовувати його в якості збирання та виправлення до нього трохи листкове. Використовуйте 3.0.4, якщо немає поважної причини не робити цього.
Помилок і зворотній зв'язок
Codeviz в значній мірі не супроводжується ці дні, як це здебільшого робить те, що мені потрібно це робити. Якщо у Вас є конкретні питання, зв'яжіться зі мною безпосередньо.
Кредити
Більша частина цього була реалізована Мела Горман (mel@csn.ul.ie). Тим не менш, змін до GCC та оригінальні cdepn.pl, що цей проект був спочатку заснований на була написана Мартіном Devera (Devik) ( http://luxik.cdi.cz/ ~ devik ). З тих пір вони змінилися для підтримки інших мов і бути більш гнучким, але початкова ідея була його, завдяки Мартіну. Заохочення і підштовхування для підтримки НКК люб'язно автор NCC Ксантакіса Стеліос (sxanth@ceid.upatras.gr). Підтримка GCC 3.3.2 та інструкції з установки крос-компілятор були надані Джоел Soete. Нарешті, підтримка GCC 3.4.6 була надана Майклом Iatrou.
Завантажити
- 1.0 Release
codeviz-1.0.11.tar.gz
codeviz-1.0.10.tar.gz
codeviz-1.0.9.tar.gz
codeviz-1.0.7.tar.gz
codeviz-1.0.6.tar.gz
codeviz-1.0.5.tar.gz
codeviz-1.0.3.tar.gz
codeviz-1.0.tar.gz
- 1.0 Release canditates
codeviz-0.99d.tar.gz
codeviz-0.99c.tar.gz
codeviz-0.99b.tar.gz
codeviz-0.99.tar.gz
- Старі версії
codeviz-0.24.tar.gz
codeviz-0.23.tar.gz
codeviz-0.22.tar.gz
codeviz-0.21.tar.gz
codeviz-0.20.tar.gz
codeviz-0.19.tar.gz
codeviz-0.18.tar.gz
codeviz-0.17.tar.gz
codeviz-0.16.tar.gz
codeviz-0.15.tar.gz
codeviz-0.14.tar.gz
codeviz-0.13.tar.gz
codeviz-0.12.tar.gz
codeviz-0.11.tar.gz
codeviz-0.10.tar.gz
codeviz-0.9.tar.gz
codeviz-0.8.tar.gz
- Світанок часу версії, коли був CodeViz gengraph
gengraph-0.7.tar.gz
gengeaph-0.6 не була випущена
gengraph-0.5.tar.gz
gengraph-0.4.tar.gz
gengraph-0.3.tar.gz
gengraph-0.2.tar.gz
Изменений
---------
Версия 1.0.2
о угробил поддержку нескольких компиляторов, остается только 3.4.1
о значительно превосходит C + +, поддержка нескольких исправлены ошибки
Версия 1.0.1
о поддержке GCC 3.3.2 удалено, слишком багги
о Ошибка в GCC 3.2.3 скрипт установки фиксированного до
о поддержке - шрифт, чтобы указать, какой шрифт использовать для графов
о поддержке вновь доступны для HTML поколения и - shighlight
Версия 1.0
о Заключительные немного макросов настройки признание
обновление документации о
Версия 0.99
о Будьте последовательны об использовании ПЗРО или cdepn
Лучше о обработки заголовков
.
Версия 0,24
Добавлена поддержка - версия переключателя
Версия 0,23
о Удалить CPP поддержку в методе cxref, он был слишком тонкий
о Изменен C + + метод методы cdepn использовать файлы используют cdepn, работает хорошо
о CObjDump теперь будут ставить "вокруг этикетки с::
Версия 0,22
о Ошибки с - план переключатель фиксированной
о Patch и установка для GCC 3.3.2 компилятор фиксированной
Версия 0.21
Добавлен отсутствующий файл
Версия 0,20
о Исправлена ошибка с - простой использования
о Исправлена ошибка с именем функции SMP искажения с более поздними ядер 2.6
о Рассчитать совокупный использования стека - рр-cstack пост-обработки модулем
Версия 0,19
о основном очистке кода
о Перемещенные график оказания Output.pm, что экспорт только renderGraph ()
о Перемещенные функциями печати на Format.pm
о Перемещенные IPC функций IPC.pm
о Перемещенные остальных функций график Graph.pm
о фиксированной cobjdump для бинарных анализ
Добавлена постобработка анализа genfull рассчитать использование стека
о Выдать стек и выделить чрезмерное использование для gengraph
Версия 0,18
о Разрешить выход только графического файла без использования точки
о поддержке шаблонных URL, базой для карт HTML-изображения
о Улучшенная поддержка источника выделения обычаи
о Разрешить стандартная ошибка будет перенаправлен (полезно режиме демона)
о Разрешить стандартный вывод будет перенаправлен (полезно режиме демона)
Версия 0,17
о Основные Исправлена ошибка, не позволявшая genfull работает
о поддержке GCC 3.3.2 (Joel Soete)
о кросс-компиляции инструкции (Joel Soete)
Версия 0,16
о многих исправляет ошибку и очистке, связанные с HTML-рендеринга
о Улучшенная обработка узлов атрибутов для очистки кода
о многих очистке кода, чтобы уменьшить сложность, в целом меньше кода
обновление документации о
Версия 0,15
Показать о месте вызова функции (- все-LOCS) (Mel)
о графике функции верхнего уровня на основе регулярных выражений (Лера + Mel)
о различных веб-страницы связанные параметры, добавляемые (Лера + Mel)
Версия 0,14
о более мелких ошибок
о поддержке, чтобы показать / игнорировать функций на основе регулярных выражений (Лера)
о RPM Добавить файл спецификаций (Лера)
о формате узлы, которые не пройденный по-разному (Лера)
Версия 0,13
о Исправления
Версия 0,12
о графиках в настоящее время внутренне представлены как группы DAG, массивные ускорение
о graph2vrml удален, поскольку он никуда не собиралась полезно
о Демон / клиент добавлена поддержка
о GIF, добавлена поддержка для веб-страниц
о Правильная проверка доступности области точки
о различные оптимизации и ускорение
Версия 0,11
о cdepn и cxref методы объединены
о cdepn метод более точный и может определить файлы, чтобы игнорировать
о Выходной модуль печати добавил, только cdepn использует его в настоящее время
Версия 0,10
о Избегайте конфликты имен, где структура имена совпадают с функциями в cxrefdep
о Повышенное разрешение коллизии имен
о NCC добавлена поддержка для новых CNCC метод, который поддерживает функцию указателей
Версия 0.9
о внешних ссылок добавлена поддержка, которая понимает макросы
о Малой исправляет ошибку и очистке
Версия 0.8
Модульная о сборе данных, так что многие методы сбора могут быть легко добавлены
Все методы сбора теперь Perl библиотек
о С + + Добавлена поддержка
о Интегрированы все скрипты вместе так, что есть только две основные сценарии
о objdump поддержки, с тем, что проект не зависит от пропатчен составлен
о Патчи для GCC обновлен до GCC-3.0.4
о Патчи добавлены для GCC-2.95.3 и GCC-3.2.3
о Glibc обойти добавлена новая версия бойким компиляции GCC
о Автоматизированные скачать, скомпилировать и патч-скрипты добавлены для каждой версии компилятора
Версия 0.7
о Обратный графа вызовов Поддержка
Интернет страниц о человеке и справочной документации
Версия 0.5
о Fix до случая, когда графы с похожими названиями функции иногда
коррумпированы. Большая часть времени он будет работать вне нормально, но в других случаях кратных ребер или
связанными с этими функциями были выставлены
Требовать о том, что порядок вызова график соответствует порядку в коде прекрасно. Он
был очень редкий случай, глубиной первого поиска графа вызовов даст
вводящим в заблуждение ввиду код
о Разрешить множественные функции должны быть указаны в графе. Это действительно удобно
, когда ряд функций API карты гораздо меньший набор и желательно
, чтобы отобразить все обертки API в одном месте
о Небольшое исправление документации
Версия 0.4
о порядке функции отображаются теперь в том же порядке в качестве источника.
Обход графа в глубину поиска будет же порядке, в
код
Версия 0.3
о фиксированной cdepn.pl работать с ядрами 2.5.x