Точка наблюдения GDB на структурных переменных

У меня есть такая структура:

    struct A 
    {
        int a; 
        char b; 
    };

на эту структуру ссылаются в разных местах большого кода. Указатель на эту структуру передается различным функциям и, соответственно, переменные в этой структуре обновляются. я хочу установить точку наблюдения для переменной а в этой структуре, так как она проходит через многие функции. чтобы увидеть, как меняется. Как мне установить эту точку наблюдения?

2 ответа

Сначала установите точку останова, где вы создаете экземпляр своей структуры, используя break, например

break myfile.c:9

Затем просто используйте часы, чтобы установить точку наблюдения, как

watch myStructInstance.a

для переменной а или

watch *0x7ffff75177f0

для адреса памяти. Адрес памяти можно легко получить с помощью печати, например,

print &myStructInstance.a

Теперь каждый раз, когда переменная a или данный адрес памяти модифицируется, GDB будет прерываться.

Я сталкиваюсь с той же проблемой при отладке симулятора виртуальной памяти. Проблема заключается в том, как внимательно следить за данными внутри структур.

Я попытался использовать печать, чтобы проверить, но это слишком шумно. Потому что я должен распечатать более 15 переменных.

Я также пытался использовать точку наблюдения, но на своем компьютере я могу установить не более 4 аппаратных точек наблюдения. Это даже не близко к моей цели.

Наконец, я нахожу свое решение, используя пользовательскую функцию в файле.gdbinit. например, если я хочу посмотреть массив моей структуры, используя

define lookintoStructs
    if mystruct != 0x0
        print mystruct[0]
        print mystruct[1]
        print mystruct[2]
        print mystruct[3]
        print mystruct[4]
        print mystruct[5]
    end
end

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

define hook-next
    lookintoStructs
end

поэтому, когда я вызываю next или n в gdb, lookintoStructs может вызываться автоматически. отлично работает для меня

Другие вопросы по тегам