Wie Sie Zugang zu target von std::tr1::shared_ptr in GDB
Wie kann ich Ziel, std::tr1::shared_ptr in GDB. Das funktioniert nicht:
(gdb) p sharedPtr->variableOfTarget
Wenn ich versuche mit der pointer-Objekt selbst (p sharedPtr
) bekomme ich so etwas wie dieses:
$1 = std::tr1::shared_ptr (count 2) 0x13c2060
Mit einem normalen Zeiger kann ich tun p *ptr
und erhalten Sie alle Daten oder p ptr->variable
für nur eine variable.
Bin ich auf Centos 6.5, GCC-4.4.7-4.el6 und GDB-7.2-64.el6_5.2.
- Die compiler und stdlib verwenden Sie? Auch welche version von GDB?
- sorry! Aktualisiert meine Frage.
- haben Sie versucht
(gdb) p sharedPtr.get()
? - Miranda, Das hat funktioniert! Dank sehr viel! Ich werde die Antwort in einem Augenblick.
- Ich war nicht in der Lage, Antwort auf meine eigene Frage noch, da ich zu wenig Ruf. Dies ist, was funktioniert:
p (*sharedPtr.get())
druckt den Inhalt des Ziel-Objekts und derp (*sharedPtr.get())->variableOfTarget
druckt eine einzelne variable. Komisch ist aber, dass, wenn man die Klammern wie diesep *sharedPtr.get()
es wird ferner die Ausführung des Programms. Kann mir jemand erklären, warum das so ist? unique_ptr
: stackoverflow.com/questions/22798601/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen mit
dass die Funktion zurückgibt, die einen Zeiger auf das Objekt im Besitz der smart-pointer.
(*sharedPtr.get())
. Siehe mein Kommentar zu der Frage.(gdb) p (*self.get()) You can't do that without a process to debug.
ptr->get() nicht immer funktioniert.
wenn ich versuche ptr->get(), gdb beschwert sich für: nicht lösen können-Methode ***:get() für jede Instanz überlastet
Ich schließlich gehen Sie zu /usr/include/der Quellcode zu finden ist der shared_ptr zu sehen, die privaten member.
Es stellt sich heraus, dass
ptr._M_ptr
Es funktioniert für mich. Quellcode für jedermann funktioniert.
->
ist nicht das, was Sie verwenden möchten, hier.ptr->get()
ist ein Versuch, rufen Sie dieget
Funktion aus, was der shared_ptr zeigt, und*ptr.get()
ist die Dereferenzierung, die Zeiger. Die.
Betreiber Präferenz hier.*ptr.get()
ist die gleiche, die*(ptr.get())
.Versuchte ich
p (*frame.get())
, aber es hat nicht funktioniert(das Bild ist mein shared_ptr name)dann habe ich versucht zu bekommen, was in diesem shared_ptr, dann fand ich diese
Benutzte ich es _M_ptr Feld, es hat funktioniert.
Ich verwendet std::shared_ptr, und gdb 7.6.