Настройка точки наблюдения для многопоточных приложений с помощью gdb - PullRequest
3 голосов
/ 08 ноября 2011

gdb инструкция говорит следующее.

Предупреждение. В многопоточных программах программные точки наблюдения имеют лишь ограниченную полезность. Если GDB создает программную точку наблюдения, он может наблюдать только за значением выражения в одном потоке. Если вы уверены, что выражение может измениться только из-за активности текущего потока (и если вы также уверены, что ни один другой поток не может стать текущим), то вы можете использовать программные точки наблюдения как обычно. Тем не менее, GDB может не заметить, когда активность нетокового потока изменяет выражение. (Аппаратные точки наблюдения, напротив, следят за выражением во всех потоках.)

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

1 Ответ

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

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

  p &myvar
  $1 = (int*) 0x1234556
  watch *(int*) 0x1234556

Это относится только к простым скалярным данным (один указатель, одно целое число, один байт)..)

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