Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имена глобальных переменных хранятся в файлах символов, созданных при компиляции приложения. Отладчик интерпретирует имя глобальной переменной как виртуальный адрес. Любая команда, принимаюющая адрес в качестве параметра, также принимает имя переменной. Таким образом, можно использовать все команды, описанные в разделе доступ к памяти по виртуальному адресу для чтения или записи глобальных переменных.
Кроме того, можно использовать ? (Оценка выражения) команду, чтобы отобразить адрес, связанный с любым символом.
WinDbg предоставляет элементы пользовательского интерфейса, которые можно использовать (в дополнение к командам) для просмотра и редактирования глобальных переменных. См. Просмотр и Редактирование глобальных переменных в WinDbg (классический).
Рассмотрим следующий пример. Предположим, что вы хотите проверить MyCounter
глобальную переменную, которая является 32-разрядным целым числом. Также предположим, что по умолчанию радикс равен 10.
Вы можете получить адрес этой переменной, а затем отобразить его следующим образом.
0:000> ? MyCounter
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1
0012fedc 00000052
Первый результат выполнения команды указывает на адрес MyCounter
, который равен 0x0012FEDC. Затем можно использовать команду d* (память отображения) для отображения одного двойного слова в этом адресе. (Вы также можете использовать 1244892, которая является десятичной версией этого адреса. Однако большинство программистов C предпочитают использовать 0x0012FEDC.) Вторая команда сообщает, что значение MyCounter равно 0x52 (десятичное значение 82).
Эти действия также можно выполнить в следующей команде.
0:000> dd MyCounter L1
0012fedc 00000052
Чтобы изменить значение MyCounter
на десятичное значение 83, используйте следующую команду.
0:000> ed MyCounter 83
В этом примере используются десятичные входные данные, так как этот формат кажется более естественным для целого числа. Однако выходные данные команды d\* по-прежнему в шестнадцатеричном формате.
0:000> dd MyCounter L1 0012fedc 00000053