Учебник по Delphi 4

       

Просмотр значений переменных



    При пошаговом прохождении программы в отладчике вы, несомненно, захотите узнать, что содержится в различных переменных. Для этого можете использовать окно просмотра переменных Watch List, которое предоставляет возможность пассивно просматривать содержимое одной или нескольких переменных, или диалоговое окно Evaluate/Modify, позволяющее работать только с одной переменной (в нем можно не только просмотреть, но и изменить ее содержимое).


    Для просмотра значения переменной используйте команду Run/AddWatch или установите указатель мыши на переменную в окне редактирования, щелкните правой кнопкой мыши и выберите из контекстного меню команду Add Watch at Cursor. После этого появится диалоговое окно Watch Properties, показанное на рис. 2.12. Введите имя переменной в поле Expression (если оно не появилось там автоматически). Обратите внимание на то, что вы можете просматривать значения не только переменных, но и выражений типа х*(y+z). Единственное ограничение— выражение не может содержать вызовов функций, поскольку это может вызвать побочный эффект, связанный с незапланированным вызовом функции, описанный выше, в подразделе ''Использование директивы Assert". Допускается также просмотр значений записей, массивов и других структурированных элементов.


    Поле Repeat Count используется в том случае, если у вас есть большой массив, и вы хотите просмотреть его часть. Предположим, что вам надо знать значения элементов 826-833 следующего массива

    var


        BigArray: array[1..1000] of Integer;

    Вы не можете просмотреть массив BigArray, так как 1 000 элементов просто не поместятся в окне (да и пролистать ненужные вам 825 элементов — работенка немалая!) Вместо этого вы просите показать вам значение BigArray [826] и устанавливаете параметр Repeat Count равным 8. При этом вам будут показаны значения восьми элементов массива— от 826 по 833.


    Использование поля Digits позволяет определить количество значащих цифр при выводе числа с плавающей точкой.



    Отключенная опция Enabled предотвращает вывод значения переменной, однако,

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

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

На рис 2.13 отображены значения нескольких переменных в окне Watch List. Кроме того, в некоторых случаях отладчик выводит информацию о причинах, по которым содержимое переменной недоступно.

 

 


Рис. 2.12. Использование диалогового окна Watch Properties для добавления или изменения набора переменных в окне просмотра.



Рис. 2.13. Просмотр переменных.

    Смысл приведенных сообщений поясняется ниже

Variable 'X' inaccessible here due to optimization(Переменная 'X' недоступна из-за оптимизации). В этой точке значение переменной просмотреть невозможно (иногда это можно сделать в другом месте программы), так как для нее не выделена память из-за оптимизации программы компилятором.

Symbol was eliminated by linker (Переменная удалена компоновщиком). Переменная удалена из кода программы компоновщиком, так как на нее нет ни одной ссылки в тексте программы.

    Отладчик также выводит сообщение об ошибке, если имя переменной написано неправильно, например вы запросили значение Foo [5], в то время как переменная Foo массивом не является.

Совет: Когда вы пытаетесь просмотреть свойства объекта, выводимые значения могут оказаться бессмысленными. Многие свойства объектов, выглядящие как переменные, на самом деле являются вызовами функций. Отладчик не вызывает функции для определения значений, а потому корректные значения при таком просмотре вы получить не можете. Выход — в объявлении новых переменных, присвоении им значений свойств и просмотре не свойств, а новых переменных. Неприятности могут начаться из-за слишком умного оптимизатора, который сообразит, что, раз в программе значение переменной больше не используется, ее можно выбросить без ущерба для программы (увы, но не для отладки программы!) Если это происходит, используйте глобальные переменные, т.е. переменные, объявленные вне функции или процедуры. Отладчик всегда корректно отобразит значения глобальных переменных.


Содержание раздела