Вы можете поставить точку наблюдения:
watch x
Это сломается при изменении x
. x
может быть любым типом переменной. Если у вас есть:
class A;
A x;
Тогда GDB будет прерываться всякий раз, когда x изменяется.
На самом деле вы можете поставить точку наблюдения для любого выражения, и gdb прекратит работу при изменении выражения. Однако будьте осторожны с этим, потому что, если выражение не является чем-то, что поддерживает базовое оборудование, GDB должен будет оценивать это после каждой инструкции, что приводит к ужасной производительности. Например, если A
выше - это класс с большим количеством членов, то gdb может просмотреть весь экземпляр x
, но способ его работы таков:
- выполнить инструкцию
- перейти на точку останова отладки
- проверить, изменилось ли
x
- возврат в программу
Естественно, это очень медленно. Если x
является int
, тогда GDB может использовать аппаратную точку останова.
Если у вас есть определенный адрес памяти, вы можете посмотреть его тоже:
watch *0x1234
Это прекратится при изменении содержимого [0x1234].
Вы также можете установить точку останова чтения, используя rwatch
или awatch
, чтобы установить точку останова чтения / записи.