Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyahpepijatan fungsi C++ menjelaskan: Bagaimana untuk mencari baris kod yang menyebabkan ralat?

Penyahpepijatan fungsi C++ menjelaskan: Bagaimana untuk mencari baris kod yang menyebabkan ralat?

王林
王林asal
2024-05-02 10:00:01518semak imbas

Dalam pembangunan C++, penyahpepijatan fungsi boleh membantu mencari baris kod yang salah. Penyahpepijatan boleh dilakukan dengan menggunakan GDB, penyahpepijat Visual Studio atau penegasan. GDB menyediakan keupayaan penyahpepijatan baris perintah yang berkuasa, termasuk menetapkan titik putus, melaksanakan baris demi baris, mencetak pembolehubah, dsb. Penyahpepijat Visual Studio menyediakan antara muka grafik yang menyokong titik putus, melangkah, melihat pembolehubah dan menjejak panggilan fungsi. Penegasan boleh disemak oleh kod, dan apabila syarat itu tidak benar, atur cara akan ditamatkan dan mesej ralat akan dicetak. Melalui teknologi ini, pembangun boleh menyahpepijat kod dengan cekap, memendekkan masa penyahpepijatan dan meningkatkan kualiti kod.

C++ 函数调试详解:如何找出导致错误的代码行?

Penjelasan terperinci tentang penyahpepijatan fungsi C++: Bagaimana untuk mencari baris kod yang menyebabkan ralat?

Dalam pembangunan C++, penyahpepijatan fungsi adalah penting untuk mencari baris kod yang menyebabkan ralat. Artikel ini akan memperkenalkan teknik penyahpepijatan fungsi biasa secara terperinci dan menyediakan kes praktikal untuk menunjukkan penggunaannya.

1. GDB (GNU Debugger)

GDB ialah penyahpepijat baris arahan yang berkuasa untuk menganalisis pelaksanaan kod dan mendiagnosis masalah. Untuk menggunakan GDB, masukkan arahan berikut dalam terminal:

gdb 程序名

Anda kemudian boleh nyahpepijat menggunakan arahan berikut:

  • break: Menetapkan titik putus pada baris kod yang ditentukan.
  • break: 在指定的代码行处设置断点。
  • run: 运行代码直到执行到断点。
  • step: 逐行执行代码。
  • next: 跳过函数调用並继续执行代码。
  • print: 打印变量或表达式的值。

2. Visual Studio 调试器

Visual Studio IDE 内置了一个功能强大的图形调试器。在调试模式下,可以使用以下工具:

  • 断点:在代码行处添加断点。
  • 步进:逐行或逐函数执行代码。
  • 局部变量窗口:查看函数中的局部变量。
  • 调用堆栈窗口:跟踪函数调用顺序。

3. 断言

断言是一种代码检查,如果某个条件不成立,就会导致程序终止并打印错误消息。例如:

assert(condition == true);

实战案例:查找非法参数

考虑以下 C++ 函数:

int sum(int a, int b) {
  if (a < 0 || b < 0) {
    throw std::invalid_argument("负数参数无效");
  }

  return a + b;
}

如果向此函数传递负数,将引发 std::invalid_argument 异常。

使用 GDB 调试

(gdb) break sum.cpp:10
(gdb) run
(gdb) n
(gdb) print a
(gdb) print b

这将在第 10 行处设置断点并运行程序。之后,逐行执行代码并打印 ab 的值,以识别导致异常的非法参数。

使用 Visual Studio 调试器

在 Visual Studio 中,在第 10 行处设置断点,然后运行程序。在调试器工具栏中,可以使用步骤工具逐行执行代码,并检查局部变量窗口中的 abrun: Jalankan kod sehingga ia mencapai titik putus.

langkah: Laksanakan kod baris demi baris.

seterusnya: Langkau panggilan fungsi dan teruskan pelaksanaan kod. cetak: Cetak nilai pembolehubah atau ungkapan.

2. Visual Studio Debugger

🎜Visual Studio IDE mempunyai penyahpepijat grafik terbina dalam. Dalam mod nyahpepijat, alatan berikut tersedia: 🎜🎜🎜Titik putus: Tambahkan titik putus pada baris kod. 🎜Melangkah: Laksanakan kod baris demi baris atau fungsi mengikut fungsi. 🎜Tetingkap pembolehubah setempat: Lihat pembolehubah setempat dalam fungsi. 🎜Tetingkap tindanan panggilan: Jejaki urutan panggilan fungsi. 🎜🎜3. Assertion🎜🎜🎜Assertion ialah semakan kod Jika keadaan tertentu tidak benar, ia akan menyebabkan program ditamatkan dan mencetak mesej ralat. Contohnya: 🎜rrreee🎜🎜Contoh Praktikal: Mencari Hujah Haram🎜🎜🎜Pertimbangkan fungsi C++ berikut: 🎜rrreee🎜Jika anda menghantar nombor negatif kepada fungsi ini, pengecualian std::invalid_argument akan menjadi dilemparkan. 🎜🎜🎜Menyahpepijat dengan GDB🎜🎜rrreee🎜Ini akan menetapkan titik putus pada baris 10 dan menjalankan program. Selepas itu, laksanakan baris kod demi baris dan cetak nilai a dan b untuk mengenal pasti parameter haram yang menyebabkan pengecualian. 🎜🎜🎜Menggunakan Visual Studio Debugger🎜🎜🎜Dalam Visual Studio, tetapkan titik putus pada baris 10 dan jalankan atur cara. Dalam bar alat penyahpepijat, anda boleh menggunakan alat langkah untuk melangkah melalui baris demi baris kod dan memeriksa nilai a dan b dalam tetingkap pembolehubah setempat. 🎜🎜🎜Kesimpulan🎜🎜🎜 Menguasai teknik penyahpepijatan fungsi adalah penting untuk menyahpepijat kod C++ dengan berkesan. Dengan menggunakan GDB, penyahpepijat Visual Studio atau penegasan, pembangun boleh dengan mudah menentukan baris kod yang menyebabkan ralat, sekali gus mengurangkan masa penyahpepijatan dan meningkatkan kualiti kod. 🎜

Atas ialah kandungan terperinci Penyahpepijatan fungsi C++ menjelaskan: Bagaimana untuk mencari baris kod yang menyebabkan ralat?. 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