Поделиться через


Доступ к глобальным переменным

Имена глобальных переменных хранятся в файлах символов, созданных при компиляции приложения. Отладчик интерпретирует имя глобальной переменной как виртуальный адрес. Любая команда, принимаюющая адрес в качестве параметра, также принимает имя переменной. Таким образом, можно использовать все команды, описанные в разделе доступ к памяти по виртуальному адресу для чтения или записи глобальных переменных.

Кроме того, можно использовать ? (Оценка выражения) команду, чтобы отобразить адрес, связанный с любым символом.

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