Rumah >pembangunan bahagian belakang >C++ >Kemahiran Nyahpepijat Jauh OKMX-C GDB
Dalam bidang pembangunan terbenam, penyahpepijatan merupakan langkah kritikal untuk memastikan operasi program yang stabil. Bagi pembangun yang menggunakan papan pembangunan OKMX8MP-C, menguasai teknik penyahpepijatan jauh GDB boleh meningkatkan kecekapan pembangunan dengan ketara. GDB, singkatan kepada The GNU Project Debugger, ialah alat penyahpepijatan yang komprehensif di bawah Linux. GDB menyokong pelbagai kaedah penyahpepijatan, termasuk menetapkan titik putus, pelaksanaan satu langkah, mencetak pembolehubah, memerhati pembolehubah, memeriksa daftar dan melihat timbunan panggilan.
Dalam pembangunan perisian persekitaran Linux, GDB ialah alat penyahpepijatan utama yang digunakan untuk menyahpepijat program C dan C. Versi 5.4.70 OKMX8MP-C disertakan dengan sokongan lalai untuk gdbserver, dan persekitaran pembangunan kami yang disediakan juga menyokong gdb secara lalai. Seterusnya, akan memperincikan cara melakukan penyahpepijatan jauh GDB pada OKMX8MP-C.
forlinx@ubuntu:~$ $CC -g test_bug.c -o test_bug
Arahan ini akan menyusun fail sumber test_bug.c dan menjana fail boleh laku test_bug dengan maklumat penyahpepijatan disertakan. Dengan cara ini, GDB boleh mengesan kedudukan yang sepadan dengan tepat dalam kod sumber semasa proses penyahpepijatan seterusnya.
Selepas penyusunan, fail boleh laku yang dijana perlu disalin ke papan pembangunan. Ini biasanya dicapai melalui port bersiri, rangkaian atau kaedah pemindahan fail lain. Dalam contoh ini, kami menganggap bahawa fail test_bug telah disalin ke direktori / pada papan pembangunan.
Tetapkan Alamat IP:
Gunakan arahan ifconfig untuk menetapkan alamat IP untuk papan pembangunan. Contohnya:
ifconfig eth0 172.16.0.109
Di sini, alamat IP papan pembangunan ditetapkan kepada 172.16.0.109
Mulakan gdbserver pada papan pembangunan, nyatakan nombor port pendengaran dan program yang akan dinyahpepijat. Contohnya:
gdbserver 172.16.0.109:2345 /test_bug
Arahan ini akan memulakan gdbserver dan mendengar pada port 2345 untuk permintaan sambungan daripada klien GDB.
root@OK8MP:~# ifconfig eth0 172.16.0.109
root@OK8MP:~# gdbserver 172.16.0.109:2345 test_bug
Proses /home/root/test_bug dicipta; pid = 1356
Mendengar pada port 2345
Pada mesin maya atau hos, tetapkan alamat IP dalam segmen rangkaian yang sama dengan papan pembangunan dan gunakan arahan ping untuk menguji ketersambungan dengan papan pembangunan.
Pastikan ping berjaya alamat IP papan pembangunan, yang merupakan prasyarat untuk penyahpepijatan jauh.
Pada mesin maya atau hos, gunakan perintah aarch64-poky-linux-gdb untuk memulakan klien GDB dan tentukan atur cara untuk dinyahpepijat. Contohnya:
forlinx@ubuntu:~/ aarch64-poky-linux-gdb test_bug
GNU gdb (GDB) 8.3.1
Hak Cipta (C) 2019 Free Software Foundation, Inc.
Lesen GPLv3 : GNU GPL versi 3 atau lebih baru http://gnu.org/licenses/gpl.html
Ini adalah perisian percuma: anda bebas untuk menukar dan mengedarkannya semula.
TIADA WARANTI, setakat yang dibenarkan oleh undang-undang.
Taip "tunjukkan penyalinan" dan "tunjukkan jaminan" untuk butiran. GDB ini telah dikonfigurasikan sebagai "--host=x86_64-pokysdk-linux --target=aarch64-poky-linux".
Taip "tunjukkan konfigurasi" untuk butiran konfigurasi.
Untuk arahan pelaporan pepijat, sila lihat:
http://www.gnu.org/software/gdb/bugs/
Dapatkan manual GDB dan sumber dokumentasi lain dalam talian di:
http://www.gnu.org/software/gdb/documentation/
Untuk mendapatkan bantuan, taip "bantuan".
Taip "perkataan apropos" untuk mencari arahan yang berkaitan dengan "perkataan"...
Membaca simbol daripada test_bug...
(gdb)
Sambung ke papan:
Dalam klien GDB, gunakan arahan jauh sasaran untuk menyambung ke gdbserver pada papan. Contohnya:
(gdb) jarak jauh sasaran 172.16.0.109:2345
Penyahpepijatan jauh menggunakan 172.16.0.109:2345
Membaca /lib/ld-linux-aarch64.so.1 dari sasaran jauh...
amaran: Pemindahan fail dari sasaran jauh boleh menjadi perlahan. Gunakan "set sysroot" untuk mengakses fail secara setempat.
Membaca /lib/ld-linux-aarch64.so.1 dari sasaran jauh...
Membaca simbol daripada sasaran:/lib/ld-linux-aarch64.so.1...
Membaca /lib/ld-2.30.so dari sasaran jauh...
Membaca /lib/.debug/ld-2.30.so dari sasaran jauh...
Membaca /lib/.debug/ld-2.30.so dari sasaran jauh...
Membaca simbol daripada sasaran:/lib/.debug/ld-2.30.so...
0x0000fffff7fcf080 dalam _start () dari sasaran:/lib/ld-linux-aarch64.so.1
(gdb)
Pada ketika ini, klien GDB menyambung ke gdbserver pada papan dan bersedia untuk memulakan penyahpepijatan jauh.
l (senarai): Menyenaraikan kod sumber.
b (break): Menetapkan titik putus.
n (seterusnya): Melangkah melalui kod baris demi baris.
s (langkah): Melangkah ke dalam fungsi untuk pelaksanaan baris demi baris.
c (teruskan): Meneruskan pelaksanaan program.
p (cetak): Mencetak nilai pembolehubah.
Sebagai contoh, gunakan perintah l untuk melihat kod sumber di lokasi semasa:
(gdb) l
12 }
13
14 batal A(int *p)
15 {
16 B(p);
17 }
18
19 batal A2(int *p)
20 {
21 C(p);
(gdb)
Kemudian, anda boleh menggunakan arahan B untuk menetapkan titik putus pada baris, seperti baris 16:
kod salin bash
(gdb) b 16
Titik putus 1 pada 0x...: fail test_bug.c, baris 16.
Gunakan arahan c untuk meneruskan pelaksanaan program. Program akan berhenti seketika pada titik putus, menunggu penyahpepijatan selanjutnya.
Pemantauan Pembolehubah: Gunakan arahan jam tangan untuk memantau perubahan pembolehubah. GDB akan menjeda pelaksanaan secara automatik apabila nilai pembolehubah berubah.
Penyahpepijatan Berbilang Thread: Jika program berbilang benang, gunakan arahan utas untuk menukar benang untuk penyahpepijatan.
Pertimbangan Keselamatan: Memastikan keselamatan persekitaran rangkaian adalah penting semasa penyahpepijatan jauh. Gunakan terowong SSH atau kaedah penyulitan lain untuk melindungi penghantaran data penyahpepijatan.
Itu sahaja kemahiran penyahpepijatan jauh OKMX8MP-C GDB. Alat berkuasa ini membolehkan penyelesaian isu yang cekap dan peningkatan pembangunan.
Atas ialah kandungan terperinci Kemahiran Nyahpepijat Jauh OKMX-C GDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!