2016-03-19 11 views
6

Ich versuche, die Adresse einer Variablen mit lldb zu drucken. Wenn Sie jedoch print &(myVar) aufrufen, wird der Inhalt der Variablen anstelle ihrer Adresse gedruckt.lldb: Drucken der Adresse einer Variablen

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

Gleiches für expression &(myVar).

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

Ich habe auch versucht expression ‚s -L Option:

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

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

jedoch die Adresse ändert jedes Mal, wenn ich expression -L aufrufen ausgegeben. Daher nehme ich an, dass es nicht mit der Adresse der Variablen im Speicher übereinstimmt.

Wie bekomme ich die Adresse der Variablen in den Speicher?

(ich benutze LLDB 3.4)

Antwort

8

Ja, die -L Ort, den Sie über die Variable ist bezeichnend, dass LLDB das Ausdrucksergebnis darzustellen macht, so dass nicht das, was Sie wollen. Obwohl der allgemeine Befehlsalias print es so aussehen lässt, als ob dieser Befehl nur Werte ausgibt, macht er viel mehr als das: z. Erstellen neuer Entitäten im laufenden Programm. Daher ist die Position des Ausdrucksergebnisses nicht trivial mit dem Ausdruck, den Sie ausgewertet haben.

Wie auch immer, es gibt zwei einfache Möglichkeiten, um dies zu erreichen. Die erste ist die Zeichenfolge Zusammenfassung zu deaktivieren, so dass Sie das tatsächliche Ergebnis des Druckens die Adresse sehen:

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

Eine weitere Möglichkeit zur gleichen Daten zu erhalten, ist die „Rahmengröße“ Befehl zu verwenden. Dieser Befehl ermöglicht Ihnen den Zugriff auf lokale Variablen ohne den Overhead des vollständigen Ausdrucksparsers. Da frame variable druckt die Variablen direkt als durch die Debug-Informationen berichtet, in diesem Fall die Option -L ist genau die Lage der Variable:

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

Danke für die ausführliche Antwort! –