- •Введение в отладчик.
- •Подключение отладчика
- •Запуск отладчика
- •Разница между Step Over и Step Into
- •Значки инструментальной панели отладчика
- •Эквиваленты меню для кнопок отладчика
- •Дополнительные пункты меню Debug
- •Локальное меню отладчика
- •Окно Trace
- •Трассировка кода объекта
- •Трассировка процедурно-ориентированного кода
- •Окно Watch
- •Окна отладчика
- •Меню View I Debug Windows
- •Наблюдение переменных как данных различного типа.
- •Страница Debug в окне Options
- •Раскладка клавиатуры
- •Короткие клавиши отладчика
Меню View I Debug Windows
Активировать скрытые или свернутые окна отладчика Visual C++ можно посредством выбора меню View или View | Debug Windows с последующей категорией из тех, что описаны ниже.
Workspace
Панель, или окно Workspace показывает исходные файлы, объекты классов и ресурсы текущего проекта.
Если вы, свернули эту панель, поместив курсор на ее правую кромку и совместив последнюю с левой кромкой, то данная команда меню не сможет снова развернуть панель. Вам придется сделать это вручную, определив разделяющую линию и заново установив размер панели.
Output
Этот пункт активирует окно Debug Output. Заметьте, что если окна состыкованы, нет никакой визуальной индикации того, что они были активированы, хотя соответствующие опции меню включены или выключены.
Clear Output Window
Это окно удаляет весь текст, выведенный в окне Debug Output (которое активно только в контекстном меню окна Output — щелкните в нем правой кнопкой мыши).
Наблюдение переменных как данных различного типа.
В последующих главах вы начнете применять опции отладчика, описанные в предыдущих разделах. Однако прежде чем смотреть на данные, выводимые в разные окна отладчика, вам следует ознакомиться с форматирующими символами, показанными в табл.3. Эти символы позволяют также изменять формат представления переменных в окнах Quick Watch и Watch.
В окне Watch можно изменять интерпретацию типа данных переменной. Форматирующий символ там просто вводится сразу за именем переменной с разделительной запятой. Например, если hexNumber имеет значение 0x0041, а вы хотите видеть значение в символьной форме, в категории Name окна Watch введите hexNumber, с. Когда вы нажмете ENTER, появится символьный формат значения:
HexNumber,c = 'A'
Таблица 3. Форматирующие символы дисплея отладчика
Символ
|
Формат
|
Значение
|
Представление
|
d,l
|
Десятичное целое со знаком
|
0xF000F061
|
-268373911
|
U
|
Десятичное целое без знака
|
0x0066
|
102
|
O
|
Восьмеричное целое без знака
|
0xF064
|
0170144
|
х,Х
|
Шестнадцатеричное целое
|
70148 (десятичное)
|
0x000011204
|
l,h
|
префикс long или short для d, i, u, о, х, X
|
00406040,hx
|
0х0с20
|
F
|
Десятичная нотация со знаком
|
5./2.
|
2.500000
|
Е
|
научная нотация со знаком
|
5./2.
|
2.500000е+004
|
G
|
Десятичная или научная нотация со знаком, какая короче
|
5./2.
|
2.5
|
С
|
одиночный символ
|
0x0066
|
Т
|
S
|
Строка
|
Ox0012fde8
|
"The String"
|
Su
|
строка Unicode
|
|
"The String"
|
St
|
строка Unicode или ASCII в зависимости от установки Unicode Strings
|
|
|
Hr
|
HRESULT или код ошибки Win32
|
0x00000000L
|
S OK
|
We
|
флаг класса Windows
|
0x000000040
|
WC DEFAULTCHAR |
Wm |
номер сообщения Windows |
0x0010 |
WM CLOSE |
В табл.4 перечислены форматирующие символы, применяемые в окне Watch для форматирования содержимого памяти.
Таблица 4. Форматирующие символы для ячеек памяти
Символ
|
Формат Формат . :f-
|
Ma
|
64 символа ASCII
|
M
|
16 байт в шестнадцатеричном, далее 16 символов ASCII
|
Mb
|
16 байт в шестнадцатеричном, далее 16 символов ASCII
|
Mw
|
8 слов
|
Md
|
4 двойных слова
|
Mq
|
4 по четыре слова
|
Mu
|
2-байтовые символы (Unicode)
|
Вы также можете пользоваться форматирующими значениями для содержимого памяти в применении к любым выражениям, оцениваемым как адрес. Для представления массива символов в виде строки поставьте перед именем массива амперсант: &ArrayName. Можно за выражением поставить еще и форматирующий символ: &ArrayName,x.
Наконец, для наблюдения за значением по специфическому адресу или значением, на которое указывает регистр, пользуйтесь операциями BY, WO или DW:
• BY - возвращает содержимое указанного байта.
• DW - возвращает содержимое указанного двойного слова.
• WO - возвращает содержимое указанного слова.
Для использования этих операций нужно просто поставить соответствующие символы перед именем переменной, регистра или константы, например: gYAchar. В этом случае окно выводит байт, слово или двойное слово по адресу, содержащемуся в переменной.
Можно также использовать контекстные скобки { } для вывода содержимого любой ячейки. Для вывода строки Unicode в окнах Watch и Quick Watch пользуйтесь спецификатором формата su. Для вывода байтов данных с помощью символов Unicode применяйте спецификатор mu.
Форматирующие символы работают с массивами, структурами, указателями и объектами только в качестве нераскрытых переменных. Если вы раскрываете объект, форматирующий символ будет отнесен ко всем его элементам. Применять же форматирующие символы к отдельным элементам нельзя.
Just-in-Time debugging
Имеется интересная опция отладки Just-in-Time debugging (назовем ее отладкой здесь-и-теперь). При отладке здесь-и-теперь ваше приложение работает вне интегрированной среды Visual C++, пока не происходит ошибки. При ошибке программы автоматически запускается отладчик Visual C++. Чтобы построить программу с возможностью отладки здесь-и-теперь, нужно сделать следующее:
1. Выберите Options в меню Tools.
2. Выберите закладку Debug.
3. Пометьте флажок Just-in-Time debugging.
4. Нажмите ОК.
5. В меню Build выполните Build <имя проекта>.exe.
Чтобы активировать отладку здесь-и-теперь в Windows NT, программист должен иметь привилегии администратора.
