2014-01-11 4 views
7

С новым изменением с gdb на lldb я не могу найти способ установки точек наблюдения на некоторые адреса памяти.Точки наблюдения на адрес памяти

В БГД я использовал этот

watch -location *0x123456 

Проделав то же самое в lldb

w s e *0x123456 

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

ответ

16

опустили «разыменования оператор» * при установке точки часов в lldb, просто передать адрес:

watchpoint set expression -- 0x123456 
# short form: 
w s e -- 0x123456 

устанавливает точку наблюдения в ячейке памяти 0x123456. При желании вы можете установить количество байтов для просмотра с помощью --size. Пример в краткой форме:

w s e -s 2 -- 0x123456 

Вы также можете установить точку наблюдения на переменной:

watchpoint set variable <variable> 
# short form: 
w s v <variable> 

Пример: С помощью следующего кода и точки останова, установленной на второй строке:

int x = 2; 
x = 5; 

Я сделал это в консоли отладчика Xcode:

 
(lldb) p &x 
(int *) $0 = 0xbfffcbd8 
(lldb) w s e -- 0xbfffcbd8 
Watchpoint created: Watchpoint 1: addr = 0xbfffcbd8 size = 4 state = enabled type = w 
    new value: 2 
(lldb) n 

Watchpoint 1 hit: 
old value: 2 
new value: 5 
(lldb) 

Проще говоря, я мог бы установить точку наблюдения с

 
(lldb) w s v x 
Watchpoint created: Watchpoint 1: addr = 0x7fff5fbff7dc size = 4 state = enabled type = w 
    declare @ '/Users/martin/Documents/tmpprojects/watcher/watcher/main.c:16' 
    watchpoint spec = 'x' 
+0

я получаю это: оценка выражение ошибки адреса, чтобы наблюдать не удалось, выражение оценивается – user3001909

+0

@ user3001909: Странно, я испытал это. - Я добавил пример. –

+0

Я попробовал ваш пример, lldb сказал использование необъявленного идентификатора «x». Затем сделал w-e-0xOFFSET, и он сработал. точка наблюдения: Watchpoint 1: addr = 0xOFFSET size = 4 state ... новое значение: 10. Спасибо! – user3001909

Смежные вопросы