Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencetak Kandungan C `std::vector` dalam GDB?

Bagaimana untuk Mencetak Kandungan C `std::vector` dalam GDB?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 03:55:28679semak imbas

How to Print the Contents of a C   `std::vector` in GDB?

Penyahpepijatan GDB untuk Vektor C

Penyahpepijatan kod C selalunya melibatkan pemeriksaan kandungan struktur data. Ini menjadi sangat mencabar apabila berurusan dengan struktur kompleks seperti vektor C. Untuk menangani perkara ini, artikel ini meneroka cara mencetak elemen std::vector dalam GDB.

Mula-mula, kenal pasti penuding kepada tatasusunan dalaman yang menyimpan elemen vektor. Dalam GCC 4.1.2, penuding ini boleh diakses melalui ungkapan myVector._M_impl._M_start.

Untuk mencetak keseluruhan vektor, gunakan arahan GDB berikut:

print *(myVector._M_impl._M_start)@myVector.size()

Arahan ini mencetak elemen vektor, bermula pada alamat myVector._M_impl._M_start dan berterusan untuk elemen myVector.size().

Untuk mencetak hanya N elemen pertama vektor, ubah suai arahan seperti berikut:

print *(myVector._M_impl._M_start)@N

Arahan ini mencetak elemen N pertama bagi vektor.

Penjelasan:

Arahan ini berfungsi kerana ia mengambil kesempatan daripada cara vektor dilaksanakan dalam GCC 4.1.2. Tatasusunan dalaman disimpan pada medan _M_impl._M_start vektor, dan perintah P@N cetakan GDB membolehkan anda mencetak N elemen tatasusunan bermula pada penunjuk P.

Pintasan:

Anda juga boleh membuat pintasan dalam fail permulaan GDB anda (.gdbinit) untuk memudahkan proses penyahpepijatan. Tambahkan baris berikut pada fail .gdbinit anda:

define p P@N

Ini mencipta alias untuk perintah cetak P@N, membolehkan anda menggunakan p untuk mencetak elemen tatasusunan dengan lebih mudah.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Kandungan C `std::vector` dalam GDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn