调试Linux下GDB调试进程既能够发现源码中的bug,又能够检测运行时的死循环和部分程序崩溃等问题,是 Linux 开发的必不可少的步骤,本文将为大家介绍如何在 Linux 下利用 GDB 进行调试。
一、安装 GDB
首先,我们需要安装 GDB,只需要简单的一行命令即可:sudo apt-get install gdb,在安装的过程中需要输入密码,接下来将 GDB 安装完成即可开始调试进程了。
二、使用 GDB 调试程序
调试过程中 GDB 需要使用到编译选项。例如,需要使用 -g 选项来启用调试库,编译完成之后,我们就可以开始启用调试工具了。在命令行里输入‘ gdb 程序名’,就可以进入 GDB 的调试主界面:
• run:使用该命令来启动程序,可以使用传入参数;
• list:显示源代码;
• break:设置断点,可以指定断点位置;
• step:逐步调试;
• next:跳过函数调用,进入下一行;
• print:打印变量及表达式的值;
• backtrace:诊断栈帧;
• delete:删除断点;
• continue:继续运行;
• quit:退出 GDB 调试。
三、GDB 调试技巧
除了上面提到的基本 GDB 调试命令,还有一些 GDB 相关的命令和技巧可供使用。
1. 多线程调试
GDB 自带的 set scheduler-locking on 命令可以锁定所有检查点,非调试线程处于睡眠状态,维持对被调试状态的稳定性。另外,用户可以用info threads 命令查看当前的线程,并且可以通过thread 线程ID 来让 GDB 同步到指定的线程。
2. 内存调试
如果想要查看变量在内存中的存储情况,GDB 提供了内存查看功能,使用 x/FMT ADDR 命令可以查看指定内存中的具体值,这里FMT 表示格式,ADDR 表示内存地址。
3. 不支持脚本
GDB 中存在很多 Java 语言的特性,而 Java 不支持脚本,在编写 GDB 脚本的时候需要注意:脚本中的 Java 对象变量不能用 set 命令赋值,而应该使用 Java 语言的类似方法。
4. 设置环境变量
在调试程序的过程中,有时需要设置一些环境变量,GDB 也提供了这样的功能,使用 set environment 变量=值 命令即可设置环境变量。
总而言之, GDB 在 Linux 下调试进程发挥了它的重要作用,而上面这些技巧也将帮助开发者更好的了解和搞懂 GDB 调试的过程,让 GDB 调试更容易,可以用最少的时间发现程序中的问题,也希望大家能够更好的使用 GDB 调试进程,将程序的运行发挥到最优的水平。