GNU/Linux >> Znalost Linux >  >> Linux

Jak vytisknout členy objektu c++ pomocí GDB z adresy, pokud je typ třídy objektu jako A::B

Vím, že je to označeno jako zodpovězené, ale dokázal jsem tento problém reprodukovat pomocí gdb na OS X (GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)) a řešení works-for-me mi na to neodpovědělo.

Ukázalo se, že na SO byla další otázka, která měla odpověď, která fungovala, takže si myslím, že stojí za to zapojit se do této otázky:

Proč gdb casting nefunguje?

Krátká odpověď je, že možná budete muset své proměnné s jmenným prostorem uvozovat:

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


Funguje pro mě:

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}

Pro mě to funguje. Co používáte (verze gcc, OS, příznaky kompilace?)


Linux
  1. Jak přidat IP adresu na Ubuntu 18.04 pomocí netplanu?

  2. Jak povolit nebo zablokovat port a IP adresu pomocí Firewallu, IP tabulek a UFW v Linuxu?

  3. Jak najít úplnou cestu k programu C++ Linux zevnitř?

  1. Jak vytisknout aktuální čas (v milisekundách) pomocí C++ / C++11

  2. Jak zobrazím členy skupiny?

  3. Jak donutím Linux, aby znovu získal novou IP adresu ze serveru DHCP?

  1. Jak ladit programy C v Linuxu pomocí gdb

  2. Linux – Jak získat adresu IPv4 pro rozhraní z /proc?

  3. Jak stáhnu soubory z příkazového řádku pomocí příkazu wget?