GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man ein C++-Objekt-Member mit GDB von einer Adresse aus druckt, wenn der Klassentyp des Objekts wie A::B ist

Ich weiß, dass dies als beantwortet gekennzeichnet ist, aber ich konnte dieses Problem mit gdb unter OS X (GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)) reproduzieren und die Works-for-me-Lösung hat es nicht für mich beantwortet.

Es stellte sich heraus, dass es eine andere Frage zu SO gab, die eine funktionierende Antwort hatte, also denke ich, dass es sich lohnt, auf diese Frage einzugehen:

Warum funktioniert GDB-Casting nicht?

Die kurze Antwort ist, dass Sie Ihre Namespace-Variablen möglicherweise in einfache Anführungszeichen setzen müssen:

(gdb) p ('MyScope::MyClass'*) ptr;


Funktioniert bei mir:

g++ -g test.cpp -o test
gdb test
(gdb) break main
(gdb) r


Breakpoint 1, main () at test.cpp:22
22      A::B *p = new A::B(100);
(gdb) n
24      p->print();
(gdb) n
m_a is 100
26      int *q = 0;
(gdb) p p
$1 = (A::B *) 0x602010
(gdb) p (A::B *) 0x602010
$2 = (A::B *) 0x602010
(gdb) p *((A::B *) 0x602010)
$3 = {m_a = 100}

Für mich geht das. Was verwenden Sie (gcc-Version, Betriebssystem, Kompilierungs-Flags?)


Linux
  1. Wie lade ich Dateien von der Befehlszeile mit dem Befehl wget herunter?

  2. Wie kann ich von der Befehlszeile aus mounten, wie es Nautilus tut?

  3. So stellen Sie die IP-Adresse von C in Linux ein

  4. Wie finde ich den vollständigen Pfad des C++-Linux-Programms von innen heraus?

  5. So drucken Sie die aktuelle Uhrzeit (mit Millisekunden) mit C++ / C++11

Wie man C-Programme unter Linux mit gdb debuggt

So listen Sie die Mitglieder einer Gruppe in Linux auf

So überprüfen Sie die Ubuntu-Version über die Befehlszeile

So ändern Sie die MAC-Adresse unter Ubuntu 20.04 mit Macchanger

Linux – Wie bekomme ich die IPv4-Adresse für eine Schnittstelle von /proc?

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host