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
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!