ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 11 Глава 8. Просмотр и модификация файлов При отладке программы Турбо отладчик TDW обрабатывает файлы на диске как естественное расширение программы. Вы можете проверить и модифицировать любой файл на диске, просматривая его в коде ASCII или в шестнадцатиричном виде. Из среды Турбо отладчика TDW можно также изменить текcтовые файлы с помощью используемого вами текстового процессора или редактора. В данной главе рассказывается, как можно анализировать и модифицировать два вида файлов на диске: файлы, в которых содержится исходный код программы, и другие файлы. Сначала мы покажем, как можно просматривать и редактировать исходные файлы программы, а затем займемся другими файлами. Просмотр исходных файлов программы Исходными файлами программы являются те файлы, с помощью компиляции которых создаются выполняемые модули (файлы .EXE). Обычно их просматривают, когда хотят проанализировать поведение программы или написать фрагмент кода. При отладке часто приходится прос матривать исходный код функции, чтобы определить, допустимы ли ее аргументы и корректно ли возвращаемое ей значение. При прохождении программы с использованием Турбо отладчика TDW он автоматически выводит на экран ту часть исходного кода, которая соответствует текущему адресу программы. Файлы, включенные в исходный файл с использованием директивы компилятора, которая генерирует номера строк (аналогично директиве uses в Паскале и INCLUDE в Ассемблере) также рассматриваются, как исходные файлы программы, даже если они не выводятся в облас ти списка Pick a Module (Выбор модуля) при выборе окна ViewіModule. Для выбора одного из этих файлов вы должны использовать команду локального меню File (Файл). Примечание: Загрузка и отладка библиотек DLL Windows фирмы Microsoft описывается в Главе 11. Для просмотра исходных файлов программы всегда нужно использовать окно Module (Модуль), поскольку это указывает Турбо отладчику TDW, что файл представляет собой исходный модуль. TDW при этом позволяет вам выполнять такие действия, как установка точек уст анова или проверка переменных программы путем простого перемещения на соответствующее место в файле. Эти и другие методы описываются в следующем разделе. Окно Module Окно Module (Модуль) можно создать, выбрав в главном меню команду ViewіModule (ОбзоріМодуль) (или нажав клавишу F3). ЙН[ю]НModule: TPDEMO File: TPDEMO.PAS 217 НННННННННННННННННННН» є end; є Writeln; І є end; { ParmsOnHeap } ± є ± є begin ± є Init; ± є Buffer := GetLine; ± є while Buffer <> '' do ± є begin ± є ProcessLine(Buffer); ± є Buffer := GetLine; ± є end; ± є ShowResult; ± є ParmsOnHeap; ± є end. ± є ± є ± є ± є И±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±Щ Рис. 8.1 Окно Module В диалоговом окне вы можете ввести имя модуля, который хотите просмотреть. При этом Турбо отладчик TDW загрузит исходный файл выбранного модуля. Поиск исходного файла он выполняет в следующем порядке: 1. В каталоге, в котором находится выполняемый файл компилятора. 2. В каталогах, заданных командой OptionsіPath (ПараметрыіМаршрут) для команды Source (Исходный модуль), или в параметре командной строке -sd. 3. В текущем каталоге. 4. В каталоге, где содержатся отлаживаемая программа. В окне Module (Модуль) выводится содержимое исходного файла выбранного модуля. В заголовке окна Module показывается имя просматриваемого модуля, имя исходного файла и номер строки, в которой находится курсор. Текущий адрес программы (CS:IP) отмечен симво лом стрелки () в первой позиции окна. Отметим, что при запуске отладчика вам необходимы как выполняемый (.EXE) файл, так и исходный файл программы. Турбо отладчик TDW ищет исходные файлы сначала в том каталоге, где их находит при компиляции компилятор, затем в каталоге, заданном с помощью ко манды OptionsіPath for source (ПараметрыіМаршрут доступа к исходным модулям), затем в текущем каталоге, и, наконец, в каталоге, где находится выполняемый файл .EXE. Если после имени файла в заголовке появляется слово modified (модифицирован), то со времени последней компиляции или компоновки для создания отлаживаемой программы файл был изменен. Это означает, что номера строк программ в обновленном исходном файле мог ут не соответствовать номерам строк отлаживаемой программы. Это может привести к тому, что стрелка, показывающая текущий адрес в программе (CS:IP), будет указывать на неверную строку. Локальное меню окна Module В локальном меню окна Module (Модуль) предусмотрено несколько команд, позволяющих вам перемещаться в указанном модуле, ссылаться на элементы данных и проверять их, а также выводить в окно новый файл или модуль. Вероятно, при работе с отладчиком вы будете пользоваться этим меню чаще, чем другими меню, поэтому лучше ближе познакомиться с различными его возможностями. Для вывода локального меню данного окна можно использовать комбинацию клавиш Alt-F10. Если разрешено использовать сокращения с клавишей Ctrl, то для непосредственного доступа к команде этого меню можно нажать клавишу Ctrl вместе с первой буквой нужной ко манды (например, при нажатии Ctrl-S вызовется команда Search). ЪДДДДДДДДДДДДї Проверка і Inspect і Просмотр і Watch і іДДДДДДДДДДДДі Модуль і Module... і Файл і File... і іДДДДДДДДДДДДі Предыдущий і Previous і Строка і Line... і Поиск і Search... і Следующий і Next... і Начало і Origin і Переход і Goto... і АДДДДДДДДДДДДЩ Команда Inspect Команда Inspect (Проверка) окрывает окно проверки, в котором выводится содержимое переменной программы, расположенной в текущей позиции курсора. Перед тем, как дать эту команду, вы можете поместить курсор в исходном файле на одну из переменных программы, или ввести ее имя в поле ввода выводимого диалогового окна. Для выделения (подсветки) выбираемого выражения можно также использовать клавишу Ins. Это позволяет избежать ввода выражения, которое и так видно в исходном модуле. Поскольку эта команда избавляет вас от ввода каждого имени проверяемой переменной, с ее помощью можно проверить множество переменных программы. Команда Watch Команда Watch (Просмотр) добавляет в окно просмотра переменную, расположенную в текущей позиции курсора. Ее полезно использовать, если вы хотите при выполнении программы непрерывно отслеживать значение переменной. Перед тем, как давать эту команду, нужно поместить в исходном файле курсор на одну из переменных программы. Для того, чтобы отметить просматриваемое выражение, можно также использовать клавишу Ins. Это позволяет избежать ввода выражения, которое видно в исходном модуле. Команда Module... Команда Module (Модуль) позволяет вам просмотреть другой модуль (который можно выбрать из выводимого списка модулей). Эту команду полезно использовать, когда вас больше не интересует текущий модуль, но вы не хотите открывать еще одно окно Module. Команда File... Команда File... (Файл) позволяет вам переключиться на просмотр того или иного исходного файла, входящего в состав просматриваемого модуля. Выберите файл, который вы хотите просмотреть, из списка файлов. Большинству модулей соответствует один исходный фай л, в котором находится весь исходный код. В других включаемых в данный файл файлах содержатся обычно только определенные константы и структуры данных. Используйте данную команду, если исходный код вашего модуля содержится в нескольких файлах. Если вы хотите просматривать одновременно несколько файлов, то для создания другого окна File (Файл) используйте команду основного меню ViewіAnotherіFile (ОбзоріДругойіФайл), или для того, чтобы просмотреть первый файл - команду ViewіFile (ОбзоріФайл). Команда Previous Команда Previous (Предыдущий) возвращает вас в последний исходный модуль, который вы просматривали. Эту команду можно также использовать для возврата к предыдущему месту после того, как вы дали команду, которая изменила позицию в текущем модуле. Команда Line... Команда Line... (Строка) позиционирует вас в файле на строку с другим номером. Введите номер новой строки, на которую вы хотите перейти. Если вы введете номер строки, превышающий число строк в файле, во эта команда переместит вас на последнюю строку файл а. Команда Search... Команда Search... (Поиск) выполняет поиск символьной строки, начиная от текущей позиции курсора. Если курсор позиционируется на что-либо, напоминающее имя переменной, выводится подсказка поиска, инициализированная данным именем. Кроме того, если с помощь ю клавиши Ins вы отметили в файле блок, то этот блок будет использован для инициализации подсказки поиска. Это позволяет вам избежать ввода строки, которая уже видна в файле. При поиске допускается задавать простые трафаретные символы: ?, задающий один символ, и *, показывающую 0 или более символов. При достижении конца файла поиск не будет продолжен с его начала. Чтобы выполнить поиск по всему файлу, перейдите на начало файл а с помощью клавиш Ctrl-PgUp. Команда Next Команда Next (Следующий) выполняет поиск следующего вхождения символьной строки, которую вы задали в команде Search (Поиск). Эту команду можно использовать только после команды Search. Иногда команда поиска, найдя соответствие, останавливается не на нужной строке, а нужная строке находится дальше в файле. Команда Next позволяет вам возобновить поиск без повторного ввода искомой строки. Команда Origin Команда Origin (Начало) позиционирует вас на тот модуль и номер строки, которые соответствуют текущему адресу программы (определяемому соедржимым регистров CS:IP). Если просматриваемый в данный момент модуль не является модулем, содержащим текущий адрес программы, окно Module (Модуль) переключится, и будет выведен нужный модуль. Данную команду полезно использовать после того, как вы просмотрели исходный код и хотите вернуться к тому месту, где в данный момент остановилась программа. Команда Goto... Команда Goto... (Перейти на...) позиционирует вас на любой адрес в программе. От вас требуется ввести соответствующий "адрес". При этом допускается вводить номер строки, имя функции или шестнадцатиричный адрес. Полное описание способов задания адреса сод ержится в Главе 9. Эту команду можно вызвать, если просто начать вводить метку, на которую вы хотите перейти. Это приведет к выводу окна подсказки (как если бы вы использовали команду RunіExecute to (ВыполнениеіВыполнение до курсора)). Для часто используемой команды это яв ляется удобным сокращением. Просмотр других файлов на диске С помощью окна File (Файл) вы можете проверить и модифицировать любой файл в вашей системе. Просматривать файл можно в коде ASCII (текстовый вид) или в шестнадцатиричном виде, либо в виде шестнадцатиричных байт данных (для этого используются команды Disp lay As, описанной далее в данной главе). Окно File Окно File (Файл) можно создать, выбрав команду ViewіFile (ОбзоріФайл) из основного меню. Для получения списка файлов для выбора допускается использовать трафаретные символы DOS. Й[ю]НFile: C:\tc\doc.h 197НННННННННННННННННННННННН[][]» є {$N+,E+} є І є ± є { File: TPDEMO.PAS ± є ± є Turbo Pascal demonstration program to show ± є Copiright (C) 1990, 1989 - Borland Inc. ± є ± є ИІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±Ѕ Рис. 8.2 Окно File В окне File (Файл) выводится содержимое выбранного вами файла. Имя просматриваемого файла, а также номер строки, на которой в файле находится курсор, выводится в заголовке окна (как текст в коде ASCII). При первом создании окна File файл может выводиться либо в виде текста в коде ASCII, либо в шестнадцатиричном виде, в зависимости от того, рассматривает ли Турбо отладчик TDW данный файл, как текстовый файл (ASCII) или как двоичные данные. С помощью кома нды Display As... (Вывести, как...) можно переключить режим вывода на экран (эта команда описана далее). Й[ю]НFile: TPDEMO.PASННННННННННННННННННННННННННННН[][]» є0000: 2f 2a 09 64 6f 73 2e 68 і* dis.h є0008: 0d 0a 0d 0a 09 44 65 66 Def І є0010: 69 6e 65 73 20 73 74 72 ines str ± є0018: 75 63 74 73 2c 20 75 6e ucts, un ± є0020: 69 6f 6e 73 2c 20 6d 61 lons, ma ± є0028: 63 72 6f 73 2c 20 61 6e cros, an ± є0020: 63 20 66 75 6e 63 74 69 d functi ± є0038: 6f 6e 73 20 74 6e 67 0d ons for ± є0040: 64 65 61 6c 20 68 6e 4d dealing ± є0048: 0a 09 77 69 20 61 20 4d with M ± є0050: 53 44 4f 53 41 49 6e 64 SDOS and ± є0058: 20 74 68 65 63 50 6e 74 the Int ± є0060: 65 6c 20 69 50 72 58 38 el iAPx8 ± є0068: 36 20 6d 69 41 72 6f 70 6 microp ± є0070: 72 6f 63 65 63 73 6f 72 rocessor ИІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±Ѕ Рис. 8.3 Окно File с выводом шестнадцатиричных данных Локальное меню окна File Локальное меню окна File (Файл) содержит команды для перемещения по файлу на диске, изменения характера вывода содержимого файла на экран и внесения в файл изменений. ЪДДДДДДДДДДДДДДДДДДДї і Goto і Переход і Search і Поиск і Next і Следующий іДДДДДДДДДДДДДДДДДДДі і Display as Ascii і Вывести в виде... і File... і Файл АДДДДДДДДДДДДДДДДДДДЩ Для вывода локального меню окна File используйте комбинацию клавиш Alt-F10. Если разрешено использовать сокращения с клавишей Ctrl, то для непосредственного доступа к команде этого меню можно нажать клавишу Ctrl совместно с первой буквой нужной команды. Команда Goto Эта команда позиционирует вас на строку с другим номером или смещением. Если вы просматриваете файл в текстовом виде (в коде ASCII), введите номер строки, на которую вы хотите перейти. Если вы просматриваете текст в виде шестнадцатиричных байт, введите с мещение относительно начала файла, с которого вы хотите начать вывод на экран. При вводе смещения вы можете использовать полный анализатор выражений. Если вы зададите строку, номер которой превышает число строк в файле, во эта команда переместит вас на п оследнюю строку файла (в конец файла). Команда Search Команда Search (Поиск) выполняет поиск символьной строки, начиная от текущей позиции курсора (для ввода символьной строки вам выводится подсказка). Если курсор позиционируется на что-либо, напоминающее имя переменной, выводится подсказка поиска (диалогов ое окно Search), инициализированная данным именем. Кроме того, если с помощью клавиши Ins вы отметили в файле блок, то этот блок будет использован для инициализации подсказки поиска. Это позволяет вам избежать ввода строки, которая уже видна в файле. Фор мат строки поиска зависит от того, выводится ли строка в коде ASCII или в шестнадцатиричном виде. Если файл выводится в коде ASCII, при поиске допускается задавать простые трафаретные символы DOS: знак вопроса ?, задающий один символ, и звездочку *, показывающую 0 или более символов. Если файл выводится в шестнадцатиричном виде, то нужно задавать список байт, состоящий из байтовых значений или заключенных в кавычки строк символов (используется тот же синтаксис языка, что и при вводе выражений). Примечание: Полная информация о списках байт приведена в Главе 9. При достижении конца файла поиск не будет продолжен с его начала. Чтобы выполнить поиск по всему файлу, перейдите на начало файла с помощью клавиш Ctrl-PgUp. Вы можете вызвать эту команду, просто начав набирать строку, которую хотите найти. При этом, как при команде Search, будет выведено окно подсказки. Команда Next Команда Next (Следующий) выполняет поиск следующего вхождения символьной строки, которую вы задали в команде Search (Поиск). Эту команду можно использовать только после команды Search (Поиск). Иногда команда поиска, найдя соответствие, останавливается не на нужной строке, а нужная строке находится дальше в файле. Команда Next позволяет вам возобновить поиск без повторного ввода искомой строки. Команда Display As Команда Display As (Вывести как...) позволяет переключаться между выводом файла в виде текста ASCII и в шестнадцатиричном виде. При выборе вывода на экран в коде ASCII файл выводится в таком виде, как вы видите его при работе с редактором или текстовым п роцессором. Если вы выберете шестнадцатиричный вывод, каждая строка будет начинаться с шестнадцатиричного смещения в файле. На строке может выводиться 8 или 16 байт данных, в зависимости от ширины области окна. Справа от шестнадцатиричного вывода байт вы водятся соответствущие каждому байту символы. Поскольку может выводиться полный набор символов, байтовые значения < 32 или > 127 выводятся на экран в виде соответствующих символов. Команда File... Команда File... (Файл) позволяет вам переключиться на просмотр другого файла. Для получения списка файлов для выбора допускается использовать трафаретные символы DOS, либо можно ввести имя конкретного файла, который и будет загружен. Если вы хотите просм атривать на экране два различных файла одновременно, то для создания другого окна File (Файл) используйте команду ViewіAhotherіFile (ОбзоріДругойіФайл). |