Проверка, когда переменная изменена - PullRequest
2 голосов
/ 08 ноября 2011

Используя Valgrind или любой другой отладчик в Linux, как можно увидеть места, где переменная изменена. Я использую GCC. Обратите внимание, что я не хочу входить в код, используя gdb. Я просто хочу запустить программу, и отладчик сообщит мне, где переменная изменена в коде.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Хм, если подумать, это не точно дубликат Могу ли я установить точку останова на «доступ к памяти» в GDB? , потому что он требует немного больше.Итак:

  1. Использование gdb
  2. Найдите адрес, который вы хотите просмотреть (аппаратные точки наблюдения работают только для просмотра address , поэтому вам нужно запустить его до точкигде создается переменная или объект, возьмите их адрес и используйте команду watch для этого адреса.
  3. Присоедините команду к адресу, чтобы дать вам обратную трассировку (или любую другую информацию, которую вам нужно собрать), и продолжайте.

Таким образом, у вас будет что-то вроде:

p &variable
watch *$$
cmd
bt
c
end

(я не совсем уверен с $$, я обычно использую $<i>n</i> как напечатаноp команда).

1 голос
/ 08 ноября 2011

Используйте Командные списки точек останова , чтобы сделать это в GDB. Вам нужно знать адрес переменной, чтобы посмотреть. Установите точку наблюдения с помощью ряда команд, подобных этой:

 watch *0xfeedface
 commands
 silent
 bt
 cont
 end

Вы также можете при желании сохранить все эти выходные данные в файл журнала. Смотрите GDB DOC для более подробной информации.

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