Я использую gdb для связи с ASIC на основе LEON2 через домашний сервер gdb (не уверен, что этот «gdb-сервер» здесь является правильной фразой). Он работает следующим образом: клиент gdb использует обычный протокол gdb для разговора с сервером gdb, который затем переводит запросы gdb на чтение и запись с/на HW и отправляет результат клиенту, если таковой имеется. Мой клиент gdb - это sparc-rtems-gdb 6.6 в RTEMS 4.8.0 на ПК с Windows 7.Почему gdb автоматически выполняет чтение после моей запрошенной записи?
Когда я начинаю GdB клиента я запустить следующую команду, чтобы прикрепить к серверу GdB:
target extended-remote localhost:5000
Тогда я хочу изменить слово в оперативной памяти, так что я запускать эту команду GDB:
set *((unsigned int*) 0x40000000)=2
Во время отладки сервера gdb я вижу, что он получает следующую строку, которая ожидается и правильная в соответствии с протоколом gdb, то есть запись 4 байта, значение 2 в адрес 0x40000000:
M40000000,4:00000002
Теперь путаница: После того, как запрос на запись выше, другой приходит запрос от клиента GDB, прочитать 4 байта из адресной 0xABD37787:
mabd37787,4
Почему клиент GDB пытается прочитать с этого адреса? Насколько я знаю, я ничего не сделал, чтобы запросить это чтение, я только хотел выполнить запись. Если gdb прочитал бы адрес 0x40000000, например, чтобы проверить запись, все будет в порядке. Но out-of-nowhere-address 0xABD37787 не существует на моем HW, что создает проблемы для меня.
Есть ли способ отлаживать клиент gdb, чтобы точно определить, что (и почему) оно отправляет и принимает? Или есть настройка в gdb, которая может объяснить это поведение?
С наилучшими пожеланиями
Хенрик
Что это за адрес? Ваша точка входа в вашу программу случайно? – dbrank0
@ dbrank0 Адресный адрес 0xABD37787 не существует на карте памяти HW. ОЗУ идет от 0x40000000 до 0x60000000. Есть несколько регистров с более высокими адресами, но не выше адреса 0xA0020000. Когда я подключаюсь к gdb, программа не работает. CPU находится в режиме отладки, а gdb разговаривает с DSU (модуль поддержки отладки) в ASIC LEON2, который может выполнять чтение и запись в ОЗУ и регистры. – Sp4ceCoder