Доступ к глобальным переменным
Имена глобальных переменных хранятся в файлах символов, которые создаются при компиляции приложения. Отладчик интерпретирует имя глобальной переменной как виртуальный адрес. Любая команда, которая принимает адрес в качестве параметра, также принимает имя переменной. Поэтому для чтения или записи глобальных переменных можно использовать все команды, описанные в разделе Доступ к памяти по виртуальному адресу .
Кроме того, можно использовать ? (Вычисление выражения) команда для отображения адреса, связанного с любым символом.
WinDbg предоставляет элементы пользовательского интерфейса, которые можно использовать (в дополнение к командам) для просмотра и редактирования глобальных переменных. См. раздел Просмотр и изменение глобальных переменных в WinDbg (классическая модель).
Рассмотрим следующий пример. Предположим, что вы хотите изучить глобальную MyCounter
переменную, которая представляет собой 32-разрядное целое число. Также предположим, что для радикса по умолчанию используется значение 10.
Вы можете получить адрес этой переменной, а затем отобразить его следующим образом.
0:000> ? MyCounter
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1
0012fedc 00000052
Первый вывод команды сообщает, что адрес MyCounter
0x0012FEDC. Затем можно использовать команду d* (display Memory), чтобы отобразить одно двойное слово на этом адресе. (Можно также использовать 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