Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


понедельник, 16 мая 2011 г.

Описание CnPack Wizards часть 17: cnDebugViewer

Это семнадцатая публикация в серии: Эксперты для Delphi: Описание CnWizards. В прошлый раз я писал о Тестере зависимостей CnWizards (Relation Analyzer) – утилите для анализа зависимостей между скомпилированными и исходными файлами. Сегодня я расскажу о CnDebugViewer.exe - просмотрщике отладочной информации отправленной из модуля CnDebug.pas.

CnDebugViewer – программа для отображения отладочной информации посланной программой с помощью модуля CnDebug.pas а также с помощью стандартной API функции OutputDebugString. Полученная информация отображается в виде дерева. Её можно фильтровать, сохранять и загружать для дальнейшего изучения. Только распечатывать не умеет. Здесь, конечно не нужна широкоформатная интерьерная печать, но возможность вывести на печать хотя бы в каком-то виде была бы полезной.

Для отправки сообщений с отладочной информацией в CnWizards входит модуль CnDebug.pas содержащий определение класса TcnDebugViewer умеющего отправлять разнообразную информацию просмотрщику. Для получения информации из TcnDebugger-а используется отображаемый в память файл (Memory mapped file).

Главное окно CnDebugViewer-а выглядит так:

Скриншот: Главное окно CnDebugViewer

Большую часть окна занимает список отладочных сообщений полученных через функции из программы. Справа можно видеть список таймеров, инициализированных через CnDebugger. Под списком сообщений расположено окошко для детального просмотра информации по выделенной записи журнала. Над списком сообщений расположена панель фильтрации журнала сообщений. А в самом низу экрана находятся закладки для переключения между программами, отправляющими отладочные сообщения. Интерфейс CnDebugViewer-а описан в файле справки CnWizards.

Столбцы журнала сообщений:

  1. # – порядковый номер
  2. Information – текст сообщения
  3. Type – тип сообщения
  4. Level – уровень
  5. Thread – поток
  6. Tag – тэг
  7. TimeStamp – время отправки

В модуле CnDebug.pas определена глобальная функция возвращающая указатель на дефолтный экземпляр класса TCnDebugger. Все сообщения можно отправлять через эту функцию.

Класс TCnDebugger содержит кучу методов для отправки сообщения разных типов. Но сейчас я упомяну только один метод, который позволяет отправить сообщение просмотрщику, явно указав все возможные параметры сообщения:

procedure LogFull(const AMsg: string; const ATag: string; ALevel: Integer; AType: TCnMsgType; CPUPeriod: Int64=0);

Читайте дальше: все методы TCnDebugger для отправки отладочной информации.

Официальные сайты проекта CnWizards: www.cnpack.org и Google Code.


Когда заработаю первый миллион построю себе дом. А после сотого – целый посёлок, тем более что есть люди способные взять на себя строительство коттеджных поселков. Вот только строить буду ни в коем случае не в Подмосковье, и увы, даже не в России.

7 комментариев:

  1. Классно!
    Очень сильно напомнило CodeRage 5 (http://www.embt.ru/RayKonopka.zip)

    Только этот попроще и бесплатный(опенсорс)

    ОтветитьУдалить
  2. CodeRage 5 - это конференция.
    По-видимому, речь идёт об инструменте CodeSite, который поставляется вместе с Delphi XE.
    К сожалению, я не работал с ним, и даже не изучал, поэтому затрудняюсь сказать насколько они похожи.

    ОтветитьУдалить
  3. >По-видимому, речь идёт об инструменте CodeSite
    Да, спасибо за корректировку (так вышло что название не запомнил, только суть))

    >который поставляется вместе с Delphi XE
    Сильно урезан

    ОтветитьУдалить
  4. А еще очень сильно напоминает DBugIntf из GExperts. Насколько я помню, очень давно была "война" м/у авторами CnWizards и GExperts. Ребята из GExperts обвиняли CnWizards, что те "слизали" их DBugIntf один в один и даже не позаботились переименовать методы и т.д.

    ОтветитьУдалить
  5. Я работал с DebugIntf из gExperts. Сейчас уже не помню как там выглядел интерфейсный юнит, но сам просмотрщик там намного беднее по возможностям.

    ОтветитьУдалить
  6. А они очень давно его функционально "заморозили". Мне кажется, что DBugIntf не меняется лет уже эдак 5.

    ОтветитьУдалить
  7. > DBugIntf не меняется лет уже эдак 5.

    Как и gExperts в принципе.

    ОтветитьУдалить

Постоянные читатели