2016-03-19 27 views
6

Bir değişkenin adresini lldb ile yazdırmaya çalışıyorum. Ancak, print &(myVar) numaralı telefonu çağırmak, değişkenin adresini adres yerine yazdırır. expression &(myVar) için aynılldb: Bir değişkenin adresini yazdırma

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

. adres değişimi ile ben expression -L çağırmak her zaman outputted Ancak

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

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

:

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

Ben de expression 'ın -L seçeneği denedik. Bu nedenle, değişkenin belleğindeki adresine karşılık gelmediğini varsayıyorum.

Değişkenin adresini nasıl bellekte alabilirim?

istediğin bu değil bu yüzden,

cevap

8

Evet, -L konum lldb ifadesi sonucu temsil etmek yapar değişken hakkında anlatıyor (ı 3.4 lldb kullanın). Ortak komut diğer adı print, bu komutun sadece değerleri yazdırdığı gibi görünmesine rağmen, bundan daha fazlasını yapar: ör. çalışan programda yeni varlıklar oluşturmak. Dolayısıyla, ifade sonucunun yeri, değerlendirdiğiniz ifadeyle önemsiz bir şekilde ilişkilendirilmez. Her neyse, buna ulaşmanın iki kolay yolu vardır.

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

aynı verilere ulaşmak için başka bir yol "çerçeve değişkeni" komutunu kullanmaktır: İlk Adresi baskı fiili sonucu görebilirsiniz böylece dize özetini kapatmak olur. Bu komut, tam ifade ayrıştırıcısının yükü olmadan yerel değişkenlere erişmenizi sağlar. Detaylı cevap için

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

Teşekkür: frame variable yazdırdığından ayıklama bilgi bildirdiği doğrudan olarak değişkenler, bu durumda -L seçeneği tam olarak değişkenin konumudur! –

İlgili konular