2015-06-20 2 views
1

Скажем, я определяю переменную с именем var в основной функции. И я поставил перед ним точку наблюдения. Затем я ввожу еще одну функцию: func(). В это время точки наблюдения могут быть удалены, так что у меня нет доступа к этой переменной. Любой метод, позволяющий всегда держать точку наблюдения, когда бы вы ни находились?Хочется смотреть последовательно и периодически проверять переменную за пределами текущего кадра в gdb

Кроме того, я знаю, что могу использовать синтаксис, например print main::var, для распечатки значения переменной. Но этого недостаточно. Любая хорошая идея?

+0

«Но этого недостаточно». - Да? уточните это. –

+0

Говоря, что «недостаточно», я имею в виду, что я постоянно предупреждаю о любом потенциальном изменении этой переменной без точки наблюдения, потому что я должен замечать эти потенциальные изменения и проверять себя, распечатывая значение. Это ничего, когда есть только несколько переменных, которые вы хотите посмотреть, и ваша структура программы проста. Но что, если многие переменные и сложная структура? – walkerlala

ответ

3

Странность gdb заключается в том, что watch пытается уважать область действия всех составляющих частей выражения. Итак, если вы watch var и var выходит за пределы сферы действия, точка наблюдения удаляется. Это относится и к элементам более сложного выражения, например watch a + b.

У этого есть оправдание, конечно, и вроде как классный в некотором смысле - но это редко то, что вы на самом деле хотите. По моему опыту, гораздо более нормально, не заботясь о масштабах и просто хочу посмотреть немного памяти.

Для этого пройдите -location в команду watch. Это будет делать то, что вы чаще всего хотите делать - просто хотите, чтобы память называлась выражением. Итак, watch -location var.