ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 2 - 9 - 2. ПЕРВОНАЧАЛЬНОЕ ЗНАКОМСТВО СОДЕРЖАНИЕ Лист 2. Первоначальное знакомство...................... 9 2.1. Подготовка "C" программ........................ 10 2.1.1. Требования к "C" программам.................... 10 2.1.2. Компиляция "C" программ........................ 10 2.1.3. Линкование объектных файлов.................... 11 2.2. Начальный запуск............................... 11 2.3. Стартовые опции................................ 13 2.3.1. Старт в черно-белом режиме..................... 14 2.3.2. Спецификация стартовых команд.................. 15 2.3.3. Установка режима разделения экрана............. 15 2.3.4. Установка оконного или последовательного режи- ма диалога..................................... 16 2.3.5. Отключение mouse'а............................. 17 2.3.6. Переключение EGA-адаптера в 43-строчный режим.. 17 2.3.7. Отладка с двумя дисплеями...................... 18 2.3.8. Включение/выключение IBM-специфичных ловушек... 18 2.4. Работа CodeView с макроассемблером............. 18 . - 10 - 2.1. Подготовка "C" программ Отлаживаемый загрузочный файл должен быть в специальном формате, содержащем информацию о номерах строк и таблицу имен. Для получения этого формата необходимо применять специальные оп- ции компилятора и линкера. Если загрузочный файл не будет иметь этой информации, CodeView не сможет связать исходный текст с ад- ресами кода; программу можно будет отлаживать только на уровне ассемблера, что существенно уменьшит возможности отладчика. В п. 2.1.1 - 2.1.3 описаны требования к "C"программам, не- обходимые опции транслятора и линкера. 2.1.1 Требования к "C"программам Для удобства работы с CodeView требуется выполнять следую- щие соглашения: 1) Программу отлаживать легче, если в исходном тексте на каждой строке находится не более одного оператора. Например, в "C"строке: code=buffer[count]; if(code=='\n')++lines; нельзя поставить точку останова на операторе ++lines; или if(code=='\n'). В этом смысле фрагмент программы: code=buffer[count]; if(code=='\n') ++lines; лучше. 2) Макросы также затрудняют отладку. Не проблема, если мак- рос тривиален: #define sizmax 100 Но отладка программы с макросом: #define ququ do { \ ++i;\ } while(i<100); совсем не проста. Не стоит пользоваться и include'ами, порождающими машинный код, так как отладчик не сможет связать include-файл с выполняе- мым кодом; используйте include-файлы только для макросов. Если же текст программы состоит из нескольких файлов, оттранслируйте их отдельно и слинкуйте: CodeView поддерживает отладку многомодуль- ных программ. ЗАМЕЧАНИЕ. Не употребляйте в первых 128 байтах текста программы русс- кие буквы и графические символы. В некоторых случаях это может стать серьезным препятствием (см. п. 3.1.3.1). 2.1.2. Компиляция "C"программ При компиляции "C"программ под отладчик употребляйте опцию транслятора /Zi, заставляющую компилятор включать в объектный файл информацию о номерах строк и создавать таблицу имен. Если таблица имен какого-то модуля не нужна, компилируйте этот модуль с ключем /Zd. Загрузочный файл при этом будет занимать меньше - 11 - места в памяти и на диске, но при отладке этого модуля будут дос- тупны значения глобальных переменных и исходный текст; станут не- доступными только локальные переменные подпрограмм. Кроме того, вам, наверно, понадобится опция /Od, выключаю- щая оптимизацию. Оптимизация повышает эффективность кода, но ее результатом может быть такое несоответствие кода и исходного тек- ста, которое сделает отладку практически невозможной. Пример: msc count /Zi /Od Эта компиляция подготовит объектный файл count.obj, увязан- ный с count.c. 2.1.3 Линкование объектных файлов При линковании объектных файлов под отладчик применяйте оп- цию /CODEVIEW (сокращенно /CO). Эта опция согласует адреса загру- зочного файла с таблицами имен и номерами строк файлов исходного текста программы. Другие опции для отладки не нужны, но можно употреблять, например, опции /MAP или /PAUSE. ПРЕДУПРЕЖДЕНИЕ. Не пользуйтесь опцией линкера /EXEPACK совместно с /CO, так как она убирает всю символьную информацию из загрузочного файла. CodeView, получив упакованный файл, выдаст предупреждение и пе- реключится в ассемблерный режим; отладка в режиме исходного текс- та станет невозможна. Загрузочный файл, слинкованный с опцией /CO, может выпол- няться MS-DOS'ом как и любой другой, но он будет значительно больше. Примеры. link /CO count cl /Zi /Od count.c Первый пример - линкование объектного файла, созданного компиляцией из предыдущего раздела. Линкер включит в загрузочный файл информацию для CodeView отладчика. Второй пример - совместная компиляция и линкование. Нет не- обходимости специфицировать /CO опцию, так как управляющая прог- рамма CL укажет ее автоматически, "увидев" опцию /Zi. 2.2 Начальный запуск Перед началом работы убедитесь, все ли необходимые файлы находятся на своих местах: Файл Место CV.EXE CodeView программа; место нахождения -- текущий каталог или любой каталог доступный по PATH'у. Если MicroSoft "C" установлен - 12 - согласно MicroSoft C Compiler User's Guide, то он должен быть в \BIN директории. CV.HLP Файл, который содержит меню- подсказки. Если вы хотите пользоваться help'ом в процессе работы с отладчиком, то этот файл должен находиться либо в текущем каталоге, либо каталоге доступном по PATH'у. Если MicroSoft "C" установлен согласно MicroSoft C Compiler User's Guide, то он должен быть в \BIN директории. Если при вызове подсказки отладчик не найдет этого файла, то он выдаст соответствующее сообщение. <Программа>.EXE Загрузочный файл "C"программы, которую вы хотите отлаживать; ее местонахождение -- текущий каталог или диск и каталог, который был специфицирован при старте CodeView. Если файл не найден, CodeView выдаст сообщение об ошибке и закончит свою работу. <Программа>.C Обычно находится в текущем каталоге. Однако, если вы специфицировали место исходного файла при компиляции, то спецификация становится частью загрузочного файла, и отладчик ищет файл по этой спецификации. Пример: при компиляциии MSC \C\DEMO, файл ищется в каталоге \C; MSC DEMO -- в текущем каталоге. Если CodeView не находит исходного файла, то он запрашивает путь к нему. Нажатие в ответ Enter говорит о том, что исходный текст не нужен и отладка будет производится на уровне ассемблера. Вызов отладчика осуществляется в формате: CV [<опции>] <спецификации файла> [<аргументы>], где <оп- ции> -- опции CodeView отладчика (см. п. 2.3), <спецификации фай- ла> -- имя .COM или .EXE файла с возможным к нему путем, а <аргу- менты> -- аргументы программы. При попытке загрузить невыполняе- мый файл CodeView заканчивает свою работу с сообщением: Not an executable file После линкования те "C" и ассемблерные программы, которые будут отлаживаться на уровне исходного текста, должны иметь рас- - 13 - ширение .EXE. Файлы с расширением .COM могут отлаживаться только в ассемблерном режиме. Программы с оверлеями не могут отлаживать- ся CodeView отладчиком. Если <спецификация файла> указывается без расширения, то по умолчанию берется расширение .EXE. Если файл не в CodeView форма- те, то CodeView распознает это, выдает сообщение: No symbolic information и переходит в ассемблерный режим. Пример вызова CodeView отладчика: CV sieve При работе на IBM компьютерах оконный режим устанавливается автоматически; на не-IBM-компьютере по умолчанию будет выбран последовательный режим. Явное указание опций может переназначать режим, выбираемый при старте. Если ваша программа -- "C"программа, то CodeView автомати- чески переключится в режим исходного текста. В этом режиме необ- ходимо выполнить одну команду трассировки для выполнения инициа- лизирующей части программы и выхода на начало отлаживаемой прог- раммы. 2.3. Стартовые опции Применяя стартовые опции, можно изменить режим, в котором будет работать CodeView после старта. Опции специфицируются с по- мощью наклонной '/' или минуса '-'; имя отлаживаемого файла не должно содержать в себе этих символов. В командной строке можно задавать более одной опции, но они дожны быть согласованы между собой. Примечание. CodeView не анализирует различия между компьютерами, он распознает IBM компьютер, опрашивая PS-DOS. Далее описаны ситуации, в которых могут понадобиться опции: Если То Вы имеете IBM-совместимый компьютер /W и хотите работать в оконном режиме. Вы имеете одноцветный дисплей, цветной /B графический адаптер (CGA), IBM или IBM-совместимый компьютер и хотите отлаживать черно-белую программу. Вы отлаживаете графическую программу /S и хотите просматривать экран вывода программы. Вы отлаживаете программу, использующую многостраничность дисплея, и хотите /S - 14 - просматривать экран вывода программы. Вы работаете на не-IBM-совместимом компьютере и хотите просматривать экран /S вывода программы. Вы работаете с IBM-совместимым компью- тером и отлаживаете программы, не /F пользующиеся графикой и многостранич- ностью экрана. Вы имеете IBM компьютер, но хотите /T отлаживаться в последовательном режиме. Вы имеете mouse, но не хотите им поль- /M зоваться в отладчике. Вы хотите 43-строчный режим дисплея и ваш компьютер имеет Графический адап- /43 тер высокого разрешения (EGA). Вы хотите чтобы CodeView отладчик вы- /C полнил серию команд при старте. Вы имеете 2 видеоадаптера и дисплея и /2 хотите один из них сделать дисплеем вывода. Выключение IBM-специфичных функций (таких как CTL+C, CTL+BREAK) для /D IBM-плохосовместимых компьютеров. Расширение возможностей отладчика IBM- /I специфическими функциями (CTL+C и CTL+BREAK). 2.3.1. Старт в черно-белом режиме Опция: /B : -B /B опция позволяет отлаживать черно-белые программы при цветном адаптере и дисплее. По умолчанию CodeView при загрузке проверяет тип адаптера и если обнаруживает MA (монохромный) адаптер, то работает в двух цветах, а если находит CGA (цветной графический адаптер), то работает в многоцветном режиме. В связи с тем, что многие двухцветные дисплеи изображают цвета полутонами, использование /B опции улучшит наглядность тек- ста. - 15 - Пример. CV /B count count.txt запуск отладки программы в черно-белом режиме. 2.3.2. Спецификация стартовых команд Опция: /C<команды> : -C<команды> /C опция специфицирует одну или несколько команд, которые будут выполнены при старте (рекомендовано использование /C сов- местно с MAKE и BATCH файлами). Каждая команда должна быть отде- лена от следующей ';'. Предупреждение. Если одна или более команд имеют аргументы, разделенные пробелами, то вся опция должна быть заключена в двойные кавычки '"'. Иначе CodeView будет интерпретировать этот аргумент как сле- дующую опцию командной строки. Если одна или более команд имеют аргументы, содержащие '<' или '>', то вся опция должна быть заключена в двойные кавычки '"'. Иначе MS-DOS будет интерпретировать их как свои команды. Примеры. CV /CGmain count count.txt CV "/CS-;n16;G countwords;D buffer L100" count count.txt CV "/C |