在本文中,我们将学习一些对初学者友好且非常基础的内容 GDB 调试器 命令。 我们将学习如何编译一个程序,以便将其传递给 GDB 进行调试。
使用终端构建和执行 C/C++ 程序
快速总结
我们将学习如何在调试模式下启动 C/C++ 程序。 我们将介绍一些最常用的 GDB 命令,例如: 休息, 步, 下一个, 跑,以及其他一些命令,对于程序员,尤其是调试器来说,它们简直就是一把瑞士军刀。 因此,无需进一步讨论,让我们直接进入 GDB 调试基础知识。
使用 GDB 进行调试
调试是必备的编程技能。 每个程序员都需要调试一些应用程序,无论是出于某种组织目的还是个人目的。 众所周知,程序员的大部分时间都花在调试之前编写的代码上。 因此,一个人应该经常学习一些调试,以便他/她可以轻松地将自己从一些错误的麻烦中解脱出来,而不会浪费任何时间。
为什么选择 GDB?
大多数大型科技公司只使用命令行和 bash 用于调试和编写代码的 shell。 此外,使用 GDB 向用户灌输了一些非常概念性的概念。 GDB 是一个命令行工具,它让我们在程序运行时可视化代码内部的内容。 人们可以学习和增强一些非常基本和最重要的概念,例如内存分配、使用指针、内存地址,最重要的是想象用户正在运行的程序内部发生了什么。
一些基本的 GDB 命令
- 休息: 此命令用于在程序内的某个特定位置添加断点,无论是行还是函数调用。
- 下一个: 此命令将您带到程序的下一行。 假设您在第 7 行设置断点,然后使用“next”或“n”将带您到第 8 行。
- 步: 此命令带您进入某个函数或当前正在执行的代码块
- 打印: 它用于显示不同变量或函数调用的值。 您只需输入“p”
- 跑: 每当我们开始调试时,我们都需要运行程序,为此,“运行”命令就在那里
- 继续: 该命令将我们带到下一个断点。
使用 GDB 调试 C++ 程序
好的,现在让我们试着看看这里面发生了什么“二进制搜索” C++程序。
一个简单的二进制搜索程序的代码
#include <iostream> #include <vector> using namespace std; int iterations_counter = 0; int binary_search(vector < int > arr, int s, int e, int key) { //base case iterations_counter++; if (s > e) return -1; int mid = (s + e) / 2; int index = -1; if (arr[mid] == key) index = mid; else if (arr[mid] > key) index = binary_search(arr, s, mid - 1, key); else index = binary_search(arr, mid + 1, e, key); return index; } int main() { cout << "Enter the elements of the vector(Press -1 to stop)" << endl; vector < int > arr; while (true) { int n; cin >> n; if (n == -1) break; arr.push_back(n); } cout << "Enter the key" << endl; int key; cin >> key; cout << "Index at which the key is found(0 based indexing, -1 indicates that the key is not present in the vector): " << binary_search(arr, 0, arr.size() - 1, key) << endl; cout << "Total Number of iterations required: " << iterations_counter << endl; }
如何编译与 GDB 一起使用的程序
您可以通过启用“-g
” 编译时的标志,如下面的命令所示
g++ "your_file_name" -o "your_output_file_name" -g
让我们通过发出以下命令开始调试
gdb "your_output_file_name"
让我们放一个 断点 在 main 上,然后是我们的 binary_search 函数 跑 该程序
我们还将使用 步 和 下一个 (n) 用于了解当前正在执行哪一行以及正在执行哪个块的命令
使用 继续 命令
使用 打印 (p) 命令显示有关各种变量的信息。
现在,我们将使用 quit 停止调试会话。
结论
在本文中,我们学习了如何使用 GDB Debugger 编译程序进行调试,以及一些最基本的调试命令和方法。 我们学习了如何使用 run、break、step、next、continue 和 print 命令。