|
Часть 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 |