Итак, я хочу знать, как я могу установить точку наблюдения чтения в регистрах
Я не верю, что GDB предоставляет какие-либо средства для этого.
Когдавы устанавливаете точку наблюдения в ячейке памяти, GDB может очень эффективно реализовать ее на платформах, которые предоставляют специальные регистры отладки (например, x86_64
).Затем программа работает на полной скорости, пока не будет получен доступ к местоположению.
На платформах, которые не предоставляют регистры отладки, GDB должен выполнить пошаговую передачу программы и сравнить значение в местоположении со значением, которое было ранеезаписано.Это очень медленно (но иногда полезно) и может работать только для точек наблюдения записи по очевидной причине.
Поскольку регистры не имеют «местоположения», когда вы устанавливаете точку наблюдения для регистра, GDB выполняет то же самоетанец "один шаг и сравнение с предыдущим значением".И точка наблюдения чтения не может работать вообще.
То, что вы просите, может быть реализовано в GDB: один шаг и проверка каждой инструкции - имеет ли она доступ к названному регистру или нет?
Но необходимость в этом очень редка, а сложность реализации довольно высока, поэтому я не думаю, что кто-то захочет на самом деле реализовать это.