your feedback send to: debugger@fyzor.com     
C++ debugger
Навигатор
Главная
Скриншоты
Документация
Скачать
Исходники
Плагины
API
История
Легенда
Связь
Ссылки
Почта
Search
Search Site With Google
Надежный хостинг по доступным ценам!

Интерфейс

Интерфейс отладчика состоит из следующих окон:

  • Source - Панель исходника
  • Code - Панель дизассемблера
  • CPU - Панель регистров процессора и кадров стека.
    Для корректного отображения кадров стека, при компиляции следует форсировать использование указателя кадров (регистр EBP). В компиляторе VC для этого можно использовать опцию /Oy-.
  • Data - Панель дампа данных
  • Log - Панель отображения лог-файла
  • Watch - Панель С-выражений в символах программы
  • Map - Панель карты секций и текущей позиции
  • Animator - Панель анимации исполнения
  • Menu - Панель меню функциональных клавиш
  • Status - Панель отображения состояния

Панель стека в отладчике не используется, так как его кадры выводятся в панель CPU.

Обложка

Обложка заполняет собой всю область рабочего пространства отладчика. Она появлятся только в тот момент, когда в отладчик ничего не загружено. Ее функция, во-первых, закрывать собой неактивные панели, во-вторых, предоставлять пользователю возможность выбрать один из последних открытых им процессов. Для запуска нужного процесса выбирите его в списке и нажмите ENTER, или кнопку "Open". Для удаления из списка - клавишу DELETE или кнопку "Delete"

Раскладки

Отладчик имеет несколько рабочих раскладок, определяющих размер и месторасположения всех его рабочих панелей. Переключение между раскладками происходит по клавише F4. Всего таких раскладок четыре. В будущем по желанию пользователей будет добавлена возможность изменения их размеров мышкой. Однако сейчас мы не видим в этом большой необходимости.

Текущая панель в отладчике, - принимающая нажатие клавиш, отображается черно-желтой рамкой. Любая панель может быть выбрана текущей, или щелчком мыши на ней, или клавишами CONTROL+F(n).

Активная панель может быть уеличена клавишей F3. Чтобы привести панель к обратному размеру достаточно повторно нажать F3.

Анимация

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

Связи между узлами показывают то, как часто одна процедура вызывает другу. Сила этой связи влияет на то, как сильно вызывающая процедура стремится к вызываемой. Эти связи имеют тенденцию к постепенному затуханию.

Управление клавиатуры

Одной из идей, легших в основу отладчика, была попытка упростить управление процессом отладки через клавиатуру, так как клавиатура является важным средством увеличения скорости работы. Кроме того, ее использование снижает утомляемость глаз, так как пользователю не нужно постоянно искать глазами пункты меню - руки набирают нужные клавиши автоматически.

Для реализации этой идеи, авторами был слегка усовершенствован механизм, знакомый многим из файловых менеджеров - строка меню клавиш F1-F10, переключаемая при нажатии комбинаций Alt/Ctrl/Shift. Усовершенствование коснулось трех аспектов:

1. Расширение

Те клавиши, которые не вляются клавишами F1-F10, выводятся в отдельное всплывающее окошко, содержание которого фильтруется в зависимости от комбинаций контрольных клавиш Alt/Ctrl/Shift. Список клавиш не использующих Alt/Ctrl/Shift выводится при нажатии кнопки F1.

2. Разграничение

Все клавиши в отладчике делятся на две группы: глобальные и локальные.

Глобальные клавиши. К ним относятся все клавиши F1-F10 и их комбинации с контрольными кнопками Alt/Ctrl/Shift. Действие глобальных клавиш распространяется на весь отладчик и не зависит от текущей панели.

Локальные клавиши. К ним относятся все символьные клавиши. Их дейвствие всегда направлено на текущую активную панель. Соответственно, каждая панель имеет свой список таких локальных клавиш, который переключается вместе с переключением текущей активной панели.

3. Упорядочивание

Все комбинации функцикнальных и контрольных клавиш строго упорядочены:

  • Fn вызывают функции управления процессом трассировки программы.
  • CTRL+Fn переключат текущую активную панель,
  • ALT+Fn вызывают различные диалоговые окна или редкие функции.
  • SHIFT+Fn вызывают различные страницы навигатора системы.

    Выражения

    В каждом диалоге, который запрашивает какое-либо значение, вы можеет использовать выражение в стиле внутреннего языка выражения отладчика, который напоминает гибрид языка C и Asm. Из него были удалены следующие операторы: : +=, -=, *= и т.д. В тоже время были добавлены: -/, +/, [..]. Кроме того, запятая ',' имеет особое значение, и используется для добавления значений к последовательности байт.

    Кроме того, выражения могут включать оператор type ptr [] из языка Asm.

    Операторы

    Здесь представлен полный список поддерживаемых операторов:

    Offset
    -/ Negative byte offset
    +/ Positive byte offset
    -> Element of pointer or scalar structure
    . Element of pointer or scalar structure
    Logical
    || OR
    && AND
    ! NOT
    Comparison
    != Not equal
    == Equal
    <= Less or Equal
    >= Greater or Equal
    < Less
    > Greater
    Arithmetic
    * Multiplication
    + Plus
    - Minus
    / Division
    % Mod
    Bitwise
    ~ NOT
    ^ XOR
    & AND
    | OR
    << Left shift
    >> Right shift
    Special
    ( .. ) Expression in braces
    [ .. ] Take assemply like address
    { .. } Not implemented yet
    , Delimits values of a list
    a ? x:y Retrieves x, when condition a is true, or y otherwise

    Строки и последовательности байт

    Вы можете сипользовать двойные кавычки для обозначения строк. Поддерживаются как однобайтовые ANSI строки, так и двубайтовые. Для обозначения двубайтовой строки используйте префикс L перед первой кавычкой.

    Примеры строк и последовательностей байтов:

    "Hello world!" // Ordinal string
    L"Hello world!" // Widecharacter string
    "Hello world!\n" // NL-terminated string
    "Hello world!\0" // Zero-terminated string
    "Hello world!", 0 // Zero-terminated string
    6, "Hello!" // Length-prefixed string
    72, 101, 108, 108, 111, 33, 0	// "Hello!" string using bytes
    (int)77, (short) 0x1234	// Bytes 0x77, 0, 0, 0, 0x34, 0x12
    

    Все строки могут содержать вставки специальных символов. Здесь представлен их полный список:

    Символ Код Название
    \b 8 забой (backspace)
    \t 9 табуляция (tabulator)
    \n 10 новая строка (new line)
    \v 11 вертикальная табуляция (vertical)
    \f 12 перевод формата (format)
    \r 13 возврат каретки (carriage return)
    \e 27 ключ (escape)
    \s 32 пробел (space)
    \q 34 двойная кавычка
    \" 34 двойная кавычка
    \' 39 одинарная кавычка
    \036 30 восьмеричный символ
    \x1E 30 шестнадцатеричный символ
    \ space нет визуальный разделитель символов

    Целые числа со знаком

    Пример чисел:

    -100
    200
    'MZ'
    

    Беззнаковые целые

    Примеры чисел:

    0x100
    0xFFFFffff
    (dword) 0x100, 
    

    Числа с плавающей точкой

    Примеры чисел:

    0.1
    1.999
    (float) 1
    1.21e4
    

    Символы

    Для совместимости с символами, которые используют разработчки компиляторов, в набор значков для обозначения символов включены следующие дополнительные значки и их последовательности: '@', '$', '??', '::', '::~'

    Примеры символов:

    CreateFile
    ImageList_Create
    ??_Gbad_cast@@UAEPAXI@Z
    ?terminate@@YAXXZ
    Apllication::Create
    Apllication::~Apllication
    

    Опции конфигурации

    Для облегчения работы с отладлачиком, множество параметров сохраняется между сессиями его работы. Как обычно, все параметры сохраняются в реестр в момент закрытия, и загружаются в момет открытия отладчика. Такие параметры, загруженные из реестра, называются глобальными.

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

    В окне конфигурации есть специальная кнопка "Flush Into Config File", которая создает локальный файл параметров. После создания такого файла, вы можеет удалить оттуда те из них, которые хотите сделать глобальными. Те что останутся станут локальными.

    Рабочее пространство

    Кроме файла опций отладчик использует еще один файл *.job, в который сохраняются все выражения, метки и символы, сделанные пользователем. Также как и файл опций, отладчик пытается прочесть его из директории, откуда был загружен процесс. После сеанса работы с этим процессом, этот файл всегда сохраняется туда же.

    Формат этого файла очень прост: каждая строка определает один элемент, который может быть выражением панели Watch, комментарием, ловушкой или точкой останова. В начале каждой строки идет идентификатор типа элемента, затем его занчение.

    Существует следующие типы элементов:

    Элемент Значение Формат значения
    watch Выражение "Expression"
    comment Комментарии Address, "Comment text"
    guard Ловушка "Address expression", "Condition expression"
    break Точка останова Address

    В конце строки идет точка с запятой.

    Адрес всегда кодируется относительно модуля, в котором он находится, и ближайшего символа, в пределах которого он находится. Относительная форма записи адреса выбрана нами, чтобы иметь возможность правильно восстанавливать адреса после перекомпиляции модулей, или в случаей когда порядок загрузки модулей меняется, и соответственно, меняется и их адреса.

    Пример файла

    watch "Count+1000";
    watch argn;
    break "_main+/0x25";
    guard "&ItemList [100]", "ItemNum >= 100";
    
  • Автор проекта и сайта: Sapunov Vladimir
    (c) Копирайт 2005-2008