Jadual Kandungan
Asas penyahpepijat GDB" >Asas penyahpepijat GDB
Kes penggunaan penyahpepijat GDB" >Kes penggunaan penyahpepijat GDB
总结" >总结
Rumah Tutorial sistem LINUX Injil menyahpepijat program C dalam Linux - gdb

Injil menyahpepijat program C dalam Linux - gdb

Feb 11, 2024 pm 08:12 PM
linux tutorial linux sistem linux arahan linux skrip shell Bermula dengan linux pembelajaran linux

Setiap pengaturcara, tidak kira betapa berpengalamannya, tidak dapat mengelak sepenuhnya pepijat dalam perisian. Oleh itu, penyelesaian masalah dan membetulkan pepijat telah menjadi salah satu tugas yang paling penting dalam kitaran pembangunan perisian. Walaupun terdapat banyak cara untuk menyelesaikan masalah pepijat, seperti ujian dan semakan kendiri kod, perisian penyahpepijat khusus juga boleh membantu menentukan masalah supaya ia boleh dibetulkan.

Bagi pengaturcara yang menggunakan bahasa pengaturcaraan C/C++ atau Fortran dan Modula-2 untuk membangunkan perisian, terdapat alat penyahpepijat yang sangat baik-GDB, yang akan menjadi berita baik untuk mereka. GDB bukan sahaja membantu pengaturcara menyahpepijat pepijat dan masalah lain dalam kod mereka dengan lebih mudah, tetapi ia juga menyediakan banyak ciri dan pilihan yang berguna. Dalam artikel ini, kami akan membincangkan beberapa asas penyahpepijat GDB, serta beberapa ciri dan pilihan berguna yang disediakannya.

在 Linux 中调试 C 程序的福音——gdb

Sebelum kita bermula, perlu dinyatakan bahawa semua arahan dan contoh dalam artikel telah diuji pada Ubuntu 14.04 LTS. Kod sampel dalam tutorial semuanya ditulis dalam bahasa C;

Asas penyahpepijat GDB

Dalam istilah orang awam, GDB membenarkan anda melihat aliran dalaman program semasa pelaksanaan dan membantu anda mengenal pasti masalah. Kami akan membincangkan penggunaan penyahpepijat GDB dengan contoh yang berfungsi dalam bahagian seterusnya, tetapi sebelum itu, mari kita bincangkan beberapa perkara asas yang akan membantu anda kemudian.

Pertama sekali, untuk berjaya menggunakan penyahpepijat seperti GDB, anda mesti menyusun atur cara dengan cara tertentu supaya pengkompil menjana maklumat penyahpepijat yang diperlukan oleh penyahpepijat. Sebagai contoh, apabila menyusun kod dengan pengkompil gcc (yang akan kami gunakan untuk menyusun contoh program C kemudian dalam tutorial ini), anda perlu menggunakan pilihan baris arahan -g.

Untuk maklumat tentang pilihan baris arahan -g dalam halaman manual pengkompil gcc, sila lihat di sini.

Seterusnya, pastikan penyahpepijat GDB dipasang pada sistem anda. Jika ia tidak dipasang, dan anda menggunakan sistem berasaskan Debian (seperti Ubuntu), maka anda boleh memasang alat tersebut dengan mudah menggunakan arahan berikut:

sudo apt-get install gdb
Salin selepas log masuk

Untuk kaedah pemasangan pada pengedaran lain, sila lihat di sini.

Sekarang, apabila anda telah menyusun atur cara seperti yang diterangkan di atas (pilihan baris arahan gcc -g) dan memasang penyahpepijat GDB, anda boleh menggunakan arahan berikut untuk menjalankan program dalam mod nyahpepijat:

gdb [可执行程序的名称]
Salin selepas log masuk

Melakukan ini akan memulakan penyahpepijat GDB, tetapi boleh laku anda belum lagi dimulakan. Pada ketika ini anda boleh menentukan tetapan berkaitan penyahpepijatan. Sebagai contoh, anda boleh menetapkan titik putus pada baris atau fungsi tertentu agar GDB menjeda pelaksanaan program pada baris tersebut.

Seterusnya, untuk memulakan program anda, anda mesti memasukkan dan melaksanakan arahan gdb berikut:

run
Salin selepas log masuk
Salin selepas log masuk

Di sini, perlu dinyatakan bahawa jika program anda memerlukan beberapa parameter baris arahan, maka anda boleh menentukan parameter ini di sini. Contohnya:

run [参数]
Salin selepas log masuk

GDB menyediakan banyak arahan berguna, yang sentiasa berguna apabila menyahpepijat. Kami akan membincangkan beberapa arahan ini dalam bahagian seterusnya.

Kes penggunaan penyahpepijat GDB

Kini kami mempunyai idea asas tentang GDB dan penggunaannya. Jadi mari kita gunakan apa yang telah kita pelajari dengan contoh. Berikut ialah contoh kod:

#include 
int main()
{
    int out = 0, tot = 0, cnt = 0;
    int val[] = {5, 54, 76, 91, 35, 27, 45, 15, 99, 0};

    while(cnt printf("/n Total = [%d]/n", tot);
    return 0;
}
Salin selepas log masuk

Terangkan secara ringkas apa yang dilakukan oleh kod ini. Dapatkan setiap nilai dalam tatasusunan val, tetapkan ia kepada pembolehubah keluar, kemudian tambah nilai sebelum tot dan nilai hasil 0xffffffff/out, dan tetapkan ia kepada pembolehubah tot.

Masalah yang dihadapi di sini ialah apabila program boleh laku yang disusun oleh kod ini dilaksanakan, ralat berikut dihasilkan:

$ ./gdb-testFloating point exception (core dumped)
Salin selepas log masuk

Jadi, untuk nyahpepijat kod ini, langkah pertama ialah menyusun atur cara menggunakan pilihan -g. Perintahnya adalah seperti berikut:

gcc -g -Wall gdb-test.c -o gdb-test
Salin selepas log masuk

Seterusnya, mari jalankan penyahpepijat GDB dan tentukan program boleh laku untuk nyahpepijat. Perintahnya adalah seperti berikut:

gdb ./gdb-test
Salin selepas log masuk

Sekarang, ralat yang baru saya perolehi ialah pengecualian titik Terapung, yang kebanyakan anda mungkin sudah tahu, disebabkan oleh n % x apabila x ialah 0. Oleh itu, dengan mengambil kira itu, saya menambah titik putus pada baris 11 di mana operasi pembahagian berlaku. Seperti berikut:

(gdb)&;break 11
Salin selepas log masuk

Nota (gdb) ialah maklumat segera penyahpepijat, saya hanya memasukkan perintah break 11.

Sekarang, biarkan GDB mula menjalankan program:

run
Salin selepas log masuk
Salin selepas log masuk

Apabila titik putus dipukul buat kali pertama, GDB memaparkan output berikut:

Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb)
Salin selepas log masuk

Seperti yang anda lihat, penyahpepijat memaparkan baris kod di mana titik putus itu berada. Sekarang, mari kita cetak nilai keluar pada masa ini. Seperti berikut:

(gdb) print out
$1 = 5
(gdb)
Salin selepas log masuk

如上所示,值 5被打印出来了。这个时候一切都还是正常的。让调试器继续执行程序直到命中下一个断点,可以通过使用 c 命令来完成:

c
Salin selepas log masuk

重复上述操作,直到 out值变为0 时。

...
...
...
Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb) print out
$2 = 99
(gdb) c
Continuing.

Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb) print out
$3 = 0
(gdb)
Salin selepas log masuk

现在,为了进一步确认问题,我使用 GDB 的s (或 step) 命令代替 c 命令。因为,我只想让当前程序在第 11 行之后暂停,再一步步执行,看看这个时候是否会发生崩溃。

以下是执行之后输出信息:

(gdb) s

Program received signal SIGFPE, Arithmetic exception.
0x080484aa in main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
Salin selepas log masuk

是的,如上输出的第一行内容所示,这就是抛出异常的地方。当我再次尝试运行s 命令时,问题最终也得到了确认:

(gdb) s

Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
Salin selepas log masuk

通过这种方式,你就可以使用 GDB 调试你的程序。

总结

GDB 提供了很多功能供用户研究和使用,在这里,我们仅仅只介绍了很少一部分内容。通过 GDB 的手册页可以进一步了解这个工具,当你在调试代码的时候,尝试使用一下它。GDB 调试器有一定的学习难度,但是它很值得你下功夫学习。

Atas ialah kandungan terperinci Injil menyahpepijat program C dalam Linux - gdb. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Empat cara untuk melaksanakan multithreading dalam bahasa c Empat cara untuk melaksanakan multithreading dalam bahasa c Apr 03, 2025 pm 03:00 PM

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Cara Membuka Web.xml Cara Membuka Web.xml Apr 03, 2025 am 06:51 AM

Untuk membuka fail web.xml, anda boleh menggunakan kaedah berikut: Gunakan editor teks (seperti Notepad atau TextEdit) untuk mengedit arahan menggunakan persekitaran pembangunan bersepadu (seperti Eclipse atau NetBeans) (Windows: Notepad Web.xml; Mac/Linux: Open -A -A TextEdit Web.xml)

Bolehkah penterjemah Python dipadam dalam sistem Linux? Bolehkah penterjemah Python dipadam dalam sistem Linux? Apr 02, 2025 am 07:00 AM

Mengenai masalah menghapuskan penterjemah python yang dilengkapi dengan sistem Linux, banyak pengagihan Linux akan memasang semula penterjemah python apabila dipasang, dan ia tidak menggunakan pengurus pakej ...

Untuk apa yang paling baik digunakan oleh Linux? Untuk apa yang paling baik digunakan oleh Linux? Apr 03, 2025 am 12:11 AM

Linux paling baik digunakan sebagai pengurusan pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam pengurusan pelayan, Linux digunakan untuk menjadi tuan rumah laman web, pangkalan data, dan aplikasi, menyediakan kestabilan dan kebolehpercayaan. 2) Dalam sistem tertanam, Linux digunakan secara meluas di rumah pintar dan sistem elektronik automotif kerana fleksibiliti dan kestabilannya. 3) Dalam persekitaran desktop, Linux menyediakan aplikasi yang kaya dan prestasi yang cekap.

Bagaimana keserasian Debian Hadoop Bagaimana keserasian Debian Hadoop Apr 02, 2025 am 08:42 AM

Debianlinux terkenal dengan kestabilan dan keselamatannya dan digunakan secara meluas dalam persekitaran pelayan, pembangunan dan desktop. Walaupun kini terdapat kekurangan arahan rasmi mengenai keserasian langsung dengan Debian dan Hadoop, artikel ini akan membimbing anda tentang cara menggunakan Hadoop pada sistem Debian anda. Keperluan Sistem Debian: Sebelum memulakan konfigurasi Hadoop, sila pastikan sistem Debian anda memenuhi keperluan operasi minimum Hadoop, yang termasuk memasang Java Runtime Environment (JRE) dan pakej Hadoop. Langkah Penyebaran Hadoop: Muat turun dan Unzip Hadoop: Muat turun versi Hadoop yang anda perlukan dari laman web Apachehadoop rasmi dan selesaikannya

Adakah debian rentetan serasi dengan pelbagai pelayar Adakah debian rentetan serasi dengan pelbagai pelayar Apr 02, 2025 am 08:30 AM

"Debianstrings" bukan istilah standard, dan makna khususnya masih belum jelas. Artikel ini tidak dapat mengulas secara langsung mengenai keserasian penyemak imbasnya. Walau bagaimanapun, jika "debianstrings" merujuk kepada aplikasi web yang dijalankan pada sistem Debian, keserasian penyemak imbasnya bergantung kepada seni bina teknikal aplikasi itu sendiri. Sebilangan besar aplikasi web moden komited untuk keserasian penyemak imbas. Ini bergantung kepada standard web berikut dan menggunakan teknologi front-end yang serasi (seperti HTML, CSS, JavaScript) dan teknologi back-end (seperti PHP, Python, Node.js, dll.). Untuk memastikan bahawa aplikasi itu serasi dengan pelbagai pelayar, pemaju sering perlu menjalankan ujian silang dan menggunakan responsif

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Apr 02, 2025 pm 03:48 PM

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Semasa membangun di GO, menyambung ke pangkalan data Oracle adalah keperluan biasa ...

See all articles