ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 12 Глава 10 Отладка программ на С++ и объекто-ориентированном Паскале ----------------------------------------------------------------- Для того, чтобы соответствовать требованиям С++ и объекто-ориентированного Паскаля, Turbo Debugger был усовершенствован, и теперь поддерживает объекто-ориентированное программирование. Для использования этих новых средств требуетсф Turbo Pascal версии 5.5 или Turbo С++, а также Turbo Debugger версии 2.0. Помимо расширений, позволяющих трассировку объектных правил или компонентных функций класса, а также исследование объектов или классов в блоке диалога Evaluate/Modify и окне Watch, Turbo Debugger 2.0 имеет специальный набор окон и локальных меню, специально разработанных для работы с объектами и классами. Окно Hierarchy ----------------------------------------------------------------- Turbo Debugger имеет специальное окно для исследования иерархической структуры объектов или классов. В это окно можно войти, выбрав View|Hierarchy. Рис.10.1 Окно Hierarchy Окно Hierarchy выводит на дислей информацию о типах объектов и классов, а не об их конкретных вхождениях. В левом подокне перечислены в алфавитном порядке типы, используемые отлаживаемым модулем. В правом подокне (два подокна используется при отладке программы на С++ с множественным наследованием) показаны все объекты или классы и их иерархия с использованием линейного графика, на котором базовый тип помещается в левой части подокна, а нисходящие от него типы (которые также могут являться предками в случае класса с множественным наследованием) помещаются справа от базового типа, и линиями показаны взаимосвязи между предками и их потомками. Подокно Object Type List (списот типов объектов) --------------- В левом подокне находится алфавитный список всех объектов или типов класса, используемых текущим модулем. Для того, чтобы не перемещать курсор среди большого числа элементов списка, используется средство инкрементного сопоставления: когда светящаяся линейка находится в левом подокне, просто начните набирать нужное имя объекта или типа класса, и при каждом нажатии клавиши Turbo Debugger будет высвечивать первый из типов, соответствующих набранным к этому моменту символам. Для открытия окна Inspector для высвеченного типа объекта/класса нажмите Enter. Эти окна описаны на стр. 158 оригинала. Локальное меню подокна Object Type/Class ---------------------- --------- Inspect Tree --------- Для вывода на дисплей локального меню данного подокна нажмите Alt-F10. Если при помощи DINST вы разрешили использование активных клавиш, то можно ими воспользоваться. Локальное меню содержит два пункта: Inspect и Tree. Команда Inspect --------------- Выводит для высвеченного типа объекта/класса окно Inspector. Команда Tree ------------ Выполняет переход к правому подокну, в котором выводится иерархическое дерево, и помещает высвеченную линейку на тип, который в этот момент высвечен в левом подокне. Подокно Hierarchy Tree ---------------------------------------- В правом подокне выводится иерархическое дерево для всех объектов или классов, используемых текущим модулем. Отношения между полрождающими и порожденными объектами или классами обозначаются линиями, причем "потомки" располагаются справа и ниже относительно "предков". Для нахождения отдельного объекта или типа класса в сложном иерархическом дереве перейдите в левое подокно и воспользуйтесь средством инкрементного поиска; затем выберите в локальном меню пункт Tree для возврата в подокно с иерархическим деревом. Соответствующий тип появится под высвеченной линейкой. При нажатии Enter для высвеченного типа появится окно Inspector для типов объект/класс. Если вы загрузили программу на С++, использущую классы с множественным наследованием, то появится третье подокно, Parent Tree, располагающееся ниже подокна Hierarchy Tree в окне Hierarchy. Если исследуемый класс имеет несколько предков, и если команда Parent локального меню подокна Hierarchy Tree установлена в состояние Yes, то в подокне Parent Tree появится реверсированное дерево и сообщение Parents of Class ("Родители класса") в левой части подокна и "предки", расположенные вниз и вправо относительно этого сообщения, причем линиями обозначаются взаимосвязи между предками и потомками. Вы можете открыть окно Inspector для любого типа объект/класс, находящегося в подокне Parent Tree, как для подокна Hierarchy Tree. Локальное (локальные) меню подокна Hierarchy Tree ------------------------------------------------- ------------- Inspect ------------- ------------- Inspect Parents Yes ------------- Локальное меню (Alt-F10 в правом подокне) подокна Hierarchy Tree имеет только один пункт Inspect. При выборе этого пункта для высвеченного типа появляется окно Inspector для типа объекта/класса. Если вы загрузили программу на С++, исполшьзующую классы с множественным наследованием, то локальное меню подокна Hierarchy Tree содержит и вторую команду, Parents. Эта команда работает как переключатель , при помощи которого вы можете управлять тем, показывать ли предков данного класса в подокне Parent Tree. Это полезно, когда исследуемый вами класс имеет множественное наследование. По умолчанию команда Parents имеет значение Yes. Локальное меню подокна Parent Tree ---------------------------------- ------------ Inspect ------------ Turbo Debugger имеет специальный тип окна Inspector, позволяющий проверять детали объекта: окно Inspector типа объект/ класс. В этом окне сведена информация о данном типе, а не о конкретных вхождениях этого типа в переменные. Рис.10.2 Окно Inspector типа объект/класс По горизонтали это окно делится на два подокна, причем в верхнем подокне перечисляютсяполя данных или компоненты данного типа, а в нижнем - имена правил или компонентных функций и (если выбранный элемент является не процедурой, а функцией) тип возврата функции. Для перехода между этими двумя подокнами используйте клавишу Tab. Если высвеченное поле данных является объектом или типом класса, либо указателем объекта или типа класса, то нажатие Enter откроет для этого поля другое окно Inspector типа объект/класс. (Это идентично выбору команды Inspect в локальном меню данного подокна). Таким образом, сложные вложенные структуры объектов или классов можно просматривать быстро, с минимумом нажатий клавиш. Для краткости параметры правила или компонентной функции в окне Inspector типа объект/класс не показываются. Для того, чтобы исследовать их параметны, нужно высветить интересующие вас правило или компонентную функцию и нажать Enter. появляется окно Inspector для правил/компонентных функций. В верхнем подокне этого окна показан адрес кода для реализации в данном объекте или типе класса выбранного правила или компонентной функции, а также имена и типы всех параметров. Если ваша программа написана на объекто-ориентированном Паскале, то нижнее подокно содержит указание на то, является ли данное правило процедурой или функцией. Нажатие Enter в любой точке окна Inspector для правил/компонентных функций вызывает на передний план окно Module с курсором, установленным на коде, реализующем проверяемые правило или компонентную функцию. Как и при стандартной проверке, Esc закрывает текущее окно Inspector, а Alt-F3 закрывает все эти окна. Локальное меню окна Inspector типа объект/класс --------------- Нажатие Alt-F10 вызывает локальное меню каждого подокна. Если в TDINST разрешены активные клавиши, вы можете выбрать элемент локального меню, нажав Ctrl и первую букву названия данного элемента. -------------------- Inspect Hierarchy Show inherited Yes -------------------- Локальное меню подокна Object Data Field имеет три элемента: Команда Inspect --------------- Если высвеченное поле является объектом или типом класса, либо указателем на них, то для высвеченного поля открывается новое окно Inspector типа объект/класс. Команда Hierarchy ----------------- Открывает окно Hierarchy для инспектируемого объекта или типа. Окно Hierarchy описано на стр. 155 оригинала. Команда Show Inherited ---------------------- По умолчанию данная команда устанавливается в значение Yes. В этом случае все поля данных или компоненты показываются, независимо от того, определены ли они в пределах типа инспектируемого объекта или класса, или наследуются от порождающего типа. При установке No выводятся только поля/компоненты, определенные в пределах инспектируемого типа. ------------------- Inspect Hierarchy Show inherited Yes ------------------- Локальное меню нижнего подокна Object Method имеет команды Inspect, Hierarchy и Show Inherited. Команда Inspect --------------- Для высвеченного элемента открывается окно Inspector правил/ компонентных функций. При нажатии Ctrl-I с курсором, установленном на адресе, показанном в этом окне, на передний план вызывается окно Module с курсором, установленном на коде, реализующем инспектируемое правило/функцию. Команда Hierarchy ----------------- Открывает окно Hierarchy для инспектируемого объекта или типа класса. Окно Hierarchy рассматривается на стр.155 оригинала. Команда Show Inherited ---------------------- Для этой команды умолчанием является значение Yes. В этом случае все правила или компонентные функции показываются, независимо от того, определены ли они в пределах типа инспектируемого объекта или класса, или наследуются от порождающего типа. При установке No выводятся только правила/функции, определенные в пределах инспектируемого типа. Окна Inspector вхождений объекта ----------------------------------------------------------------- Окна Inspector типа объект/класс обеспечивают информацию об объектах/типах класса, но ничего не говорят о данных, содержащихся в конкретных вхождениях данных объектов или классов в конкретные моменты выполнения программы. Turbo Debugger обеспечивает расширенную форму знакомого окна Inspector для записей, предназначенную специально для инспектирования вхождений объектов и классов. Для перехода в это окно поместите курсор на вхождение объекта или класса в окне Module и нажмите Ctrl-I. Рис.10.3 Окно Inspector для вхожнений объектов/классов Большинство окон Inspector для записей данных Turbo Debugger имеет два подокна: в верхнем находятся имена полей записей/компоненты и их текущие значения, а в нижнем - тип поля или компонента, высвеченного в верхнем подокне. Окно Inspector вхождений объектов/классов также имеет оба эти подокна, а между ними - третье подокно. В нем сведены правила или компонентные функции данного вхождения, а также адрес кода, соответствующий каждому вхождению. (адрес кода учитывает полиморфные объекты и VMT). Локальные меню окна Inspector вхождений объекта/класса -------- Каждое подокно данного окна имеет собственнон локальное меню, выводимое при нажатии Alt-F10 в соответствующем подокне. Если в TDINST разрешены активные клавиши, то можно ими пользоваться. --------------------- Range... Change... Methods Yes Show inherited Yes --------------------- Inspect Descend New expression... Type cast Hierarchy --------------------- Как и в случае окон Inspector для записей, нижнее подокно служит только для отображения типа высвеченного поля и не имеет локального меню. Команда Range... ---------------- Данная команда не изменилась сравнительно с первыми версиями. Она выводит диапазон элементов меню. Если инспектируемый элемент не является массивом или указателем, доступ к этому элементу невозможен. Команда Change... ----------------- Выбрав эту команду, вы можете загрузить новое значение в высвеченное поле данных или компонент. Эта команда также не изменилась по сравнению с прошлыми версиями Turbo Debugger. Команда Methods --------------- Данная команда работает как переключатель Yes/No, причем Yes устанавливается по умолчанию. При этом правила или компонентные функции перечисляются в среднем подокне. При установке значения No средняя панель не появляется. Значение данного переключателя запоминается и используется при открытии следующего окна Inspector. Команда Show inherited ---------------------- Данная команда работает как переключатель Yes/No. При установке значения Yes показываются все поля данных или компоненты, а также все правили или компонентные функции, независимо от того, определены ли они в пределах инспектируемого типа или наследуются от порождающего типа. При установке No показываются только поля и правила, определенные в пределах инспектируемого и отображаемого типа. Команда Inspect --------------- Как и в предыдущих версиях Turbo Debugger, выбор данной команды открывает окно Inspector для высвеченного поля или компонента. Нажатие Enter на высвеченном поле или компоненте делает то же самое. Команда Descend --------------- Данная команда не изменилась по сравнению с прошлыми версиями Turbo Debugger. Высвеченный элемент занимает место элемента текущего окна Inspector. Новые окна Inspector не открываются. Однако, вы не можете вернуться к полю, инспектированному перед этим, как это позволяет делать опция Inspector. Descend используется для инспектирования сложных структур данных, если вы не желаете открывать специальное окно Inspector для каждого элемента. New Expression... ----------------- Относительно прошлых версий не изменилась. Данная команда запрашивает у вас новый элемент данных или выражение для инспектирования. Этот новый элемент заменяет текущий, находящийся в окне; другое окно при этом не открывается. Команда Type Cast... -------------------- Позволяет задать инспектируемому элементу другой тип данных (Byte, Word, Int, Char, pointer). Это полезно в тех случаях, когдаокно Inspector содержит символическое имя, для которого информация о типе отсутствует, а также для явного присвоения типа нетипированным указателям. Команда Hierarchy ----------------- При выборе данной команды открывается окно Hierarchy. Полное описание данного окна см. на стр.155 оригинала. Среднее и нижнее подокна -------------------------------------- В среднем подокне перечисляются правила объекта или компонентные функции класса. Единственное различие между локальным меню подокна Object Method и локальным меню верхнего подокна состоит в отсутствии команды Change. В отличие от полей данных или компонентов, правила и компонентные функции не могут изменяться во время выполнения, и эта команда не нужна. В нижнем подокне показывается тип элемента, высвеченного в двух верхних подокнах. |