Как установить точку наблюдения GDB в регистрах? - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь установить точку наблюдения чтения в регистрах.Читая руководство пользователя.Я понял, как установить точку наблюдения в регистрах

watch [-l|-location] expr [thread thread-id] [mask maskvalue]

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

Например: watch $r1.Это означает, что GDB прервется, когда программа запишет в регистр r1, и его значение изменится.Это работает!

Но когда я использую: rwatch $r1, ответ GDB будет "Expression cannot be implemented with read/access watchpoint."

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

Большое спасибо!

1 Ответ

0 голосов
/ 22 ноября 2018

Итак, я хочу знать, как я могу установить точку наблюдения чтения в регистрах

Я не верю, что GDB предоставляет какие-либо средства для этого.

Когдавы устанавливаете точку наблюдения в ячейке памяти, GDB может очень эффективно реализовать ее на платформах, которые предоставляют специальные регистры отладки (например, x86_64).Затем программа работает на полной скорости, пока не будет получен доступ к местоположению.

На платформах, которые не предоставляют регистры отладки, GDB должен выполнить пошаговую передачу программы и сравнить значение в местоположении со значением, которое было ранеезаписано.Это очень медленно (но иногда полезно) и может работать только для точек наблюдения записи по очевидной причине.

Поскольку регистры не имеют «местоположения», когда вы устанавливаете точку наблюдения для регистра, GDB выполняет то же самоетанец "один шаг и сравнение с предыдущим значением".И точка наблюдения чтения не может работать вообще.

То, что вы просите, может быть реализовано в GDB: один шаг и проверка каждой инструкции - имеет ли она доступ к названному регистру или нет?

Но необходимость в этом очень редка, а сложность реализации довольно высока, поэтому я не думаю, что кто-то захочет на самом деле реализовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...