GNU/Linux >> Belajar Linux >  >> Linux

Cara mencetak anggota objek c++ menggunakan GDB dari alamat jika tipe kelas objek seperti A::B

Saya tahu ini diberi label sebagai dijawab, tetapi saya dapat mereproduksi masalah ini menggunakan gdb di OS X (GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)) dan solusi yang berhasil untuk saya tidak menjawabnya untuk saya.

Ternyata ada pertanyaan lain di SO yang memiliki jawaban yang berhasil, jadi menurut saya ada baiknya menarik pertanyaan ini:

Mengapa transmisi gdb tidak berfungsi?

Jawaban singkatnya adalah Anda mungkin harus mengutip tunggal variabel namespace Anda:

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


Bekerja untuk saya:

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}

Ini bekerja untuk saya. Apa yang Anda gunakan (versi gcc, OS, flag kompilasi?)


Linux
  1. Bagaimana cara mengunduh file dari baris perintah menggunakan perintah wget?

  2. Bagaimana cara me-mount dari baris perintah seperti yang dilakukan Nautilus?

  3. Bagaimana cara menemukan path lengkap program C++ Linux dari dalam?

  1. Cara mencetak waktu saat ini (dengan milidetik) menggunakan C++ / C++11

  2. Bagaimana cara mendapatkan alamat IP saya dari baris perintah?

  3. cara menghasilkan alamat MAC acak dari baris perintah Linux

  1. Cara men-debug program C di Linux menggunakan gdb

  2. Linux – Bagaimana Cara Mendapatkan Alamat IPv4 Untuk Antarmuka Dari /proc?

  3. Bagaimana cara menambahkan Alamat IP di Ubuntu 18.04 menggunakan netplan?