Страница 20 из 69
позволяет исследовать поведение отдельных частей программы. В ка-
честве примера предположим, что вы хотите проверить поведение от-
дельных частей программы. Например, предположим, что вы хотите
проверить поведение какой-либо функции, при передаче ей некор-
ректных параметров. Вполне возможно, что сделать так, чтобы ваша
программа передала в функцию требуемое для этого значение, вам
сложно, однако вы можете получить нужный результат, изменив зна-
чение какой-либо переменной непосредственно перед тем, как прог-
рамма обратится к проверяемой функции.
Если для выхода из поля нового значения вы воспользуетесь
клавишей Esc (а не Ввод), то отладчик не будет менять значение
выражения. Мы советуем вам пользоваться этой клавишей в случае,
если вы по какой-либо причине изменили свои намерения и решили не
вводить нового значения.
Вы можете вычислить значение любого допустимого в Си
выражения, при условии, что оно не содержит:
# вызовы функции;
# описанные символы (с помощью define) или типы (с помощью
typedef). Например: *wordptr == 0x20 верно, тогда как *wordptr ==
SPACE - не допускается, так как SPACE является описанием);
# локальные или статические переменные, находящиеся вне
области действия выполняемой функции (за исключением случая, ког-
да они полностью специфицированы).
- 161,162 -
Спецификация имен переменных
-----------------------------------------------------------------
Существует две типичные ситуации, в которых возникает необ-
ходимость подробной спецификации имен переменных, использзуемых в
выражении:
# когда вы хотите проконтролировать значения переменных типа
static, находящихся в различных модулях;
# или, когда вы хотите просмотреть переменные типа auto (ло-
кальные) или типа static, находящиеся в другой функции.
Для полного описания имени переменной воспользуйтесь
следующим синтаксисом:
. С плавающей точкой. n - целое от 2 до 18,
обозначает количество значащих цифр,
предназначенных для вывода. Применяется только для
величин с плавающей точкой.
M Дамп памяти. Выводит дамп памяти, начиная с
адреса, указанного в выражении. Выражение может
быть конструкцией, допустимой в левой части опера-
тора присваивания, т.е. конструкцией, обозначающей
адрес памяти; в остальных случаях спецификатор M
игнорируется. По умолчанию, каждый байт переменной
представляется двумя шестнадцатиричными цифрами.
Если спецификатор M дополнен спецификатором D, то
байт представляется в виде десятичных цифр, если
же X или H, то в виде шестнадцатиричных. В случае
спецификаторов C или S переменные выводятся как
строки ( с или без специальных символов). По умол-
чанию, количество байт соответствует размеру пере-
- 167,168 -
менной, но может быть использован повторитель для
точного указания количества байт.
P Указатель. Выводит указатели в виде seg:ofs с
дополнительной информацией об адресе, это
предпочтительнее чем принятый по умолчанию машинно
-зависимый seg:ofs формат. Формат seg:ofs говорит
вам об области памяти, в которой размещен сегмент
и имени переменной по адресной ссылке. Ниже
приведены области памяти: