Как написать функцию GDB для сравнения с счетчиком программ

Вопрос:

Я пытаюсь написать функцию gdb, которая циклы, пока переданный параметр не будет равен счетчику программы.

Я работаю с примитивным процессором, 68332. Отсутствует аппаратная точка останова. Нет ОС, которая поддерживает точки останова программного обеспечения GDB, всего лишь один шаг инструкции. GDB обеспечивает эмуляцию «программного обеспечения» «nexti count». JTAG предоставляет прогон для адресации.

Тем не менее, JTAG по какой-то причине перегружает процессор, когда он используется для работы, и я получаю ошибки шины. Я могу только надежно использовать «ступенчатую» единую инструкцию.

Если я использую GDB для «шага» по адресу, я не получаю ошибки шины.

Ниже приведена моя попытка такой функции GDB.

define mtia
if $argc == 1 then
set $address = *(unsigned char*)$arg0
while($address != $pc)
nexti
end
end

Я просто не могу заставить синтаксис правильно получить GDB, чтобы принять и запустить функцию.

Каков правильный синтаксис?

Лучший ответ:

Правильный синтаксис для указанной выше функции GDB

define mtia
    if $argc == 1 then
    set $address = (unsigned char*)$arg0
    while($address != $pc)
      nexti
    end
end

У меня была звездочка перед (unsigned char *). Это удалило тип указателя. Это вызвало синтаксическую ошибку с $ address! = $ Pc, поскольку $ pc считается указателем.

Эта функция выполняет один шаг инструкции сборки, пока не будет достигнут адрес, переданный в функцию. Медленно, но на старом процессоре M68332 это все, что у меня есть.

Оцените статью
TechArks.Ru
Добавить комментарий