2016-03-19 3 views
6

Я пытаюсь напечатать адрес переменной с помощью lldb. Однако вызов print &(myVar) печатает содержимое переменной вместо адреса.lldb: Печать адреса переменной

(lldb) print &(myVar) 
(const string *) $18 = "hello" 

То же самое для expression &(myVar).

(lldb) expression &(myVar) 
(const string *) $19 = "hello" 

Я также попытался expression «s -L вариант:

(lldb) expression -L -- &(myVar) 
0x00000000021aea80: (const string *) $20 = "hello" 

(lldb) expression -L -- myVar 
0x0000000002a15430: (std::string) $23 = "hello" 

Однако адрес, выводимый изменяется каждый раз я взываю expression -L. Поэтому я предполагаю, что он не соответствует адресу переменной в памяти.

Как получить адрес переменной в памяти?

(я использую lldb 3.4)

ответ

8

Да, -L место говорит вам о том, что переменной lldb делает для представления результата выражения, так что это не то, что вы хотите. Несмотря на то, что общий псевдоним команды print показывает, что эта команда просто печатает значения, это намного больше, чем это: например. создание новых объектов в запущенной программе. Таким образом, местоположение результата выражения не является тривиально связанным с выражением, которое вы оценили.

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

(lldb) expr --raw -- &my_string 
(string *) $14 = 0x00007fff5fbff618 

Другой способ получить на тех же данных, чтобы использовать команду «фрейм-переменной». Эта команда дает вам доступ к локальным переменным без накладных расходов полного парсера выражений. Поскольку frame variable гравюр переменные непосредственно, как сообщаемые отладочной информации, в том случае, если опция -L точно местоположение переменной:

(lldb) frame var -L my_string 
0x00007fff5fbff618: (std::__1::string) my_string = "Some string here" 
+0

Спасибо за подробный ответ! –

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