调试工具是程序员做开发的一个很重要的工具,无论多么厉害的程序员都没有办法保证自己编写的程序不会出现一点错误。即使程序编译通过,运行可能会出现很多问题,例如,程序不能运行或运行时程序崩溃异常退出,这些都是程序运行阶段可能遇到的。因为工程项目越大,调试也会相对越困难。因此一个强大调试工具是程序正常运行的保障。
不同开发环境中的调试工具
在 Windows 操作系统中,使用的大多是集成的开发环境(IDE),也就是说软件开发工具中已经包含了调试工具,例如 VC、BCB、Dev-C++ 等,这些软件中都集成了调试器。
在 Linux 操作系统中,编译程序使用GCC(GCC 编译器的功能非常的强大,几乎可以编译所有的编程语言),集成的开发环境相对较少,但可以使用的调试工具有很多,例如 GDB、binutil、strace 等,最常用的调试工具是 GDB。
GDB调试工具
Linux 开发环境中,GDB 相对其他的调试工具,使用范围要更广,使用方式有字符界面、图形界面,可以单独使用,也可以被集成到 IDE 中。GDB 调试工具在 Linux 操作系统中大多是单独使用的。
GDB 调试工具的字符界面和图形界面的比较:
- 图形界面调试较直观,可以很容易的看到程序运行到代码中的位置和程序运行的顺序,但是实现的功能相对较少;
- 字符界面可以实现的功能相对较多,占用的内存资源较少,命令的执行效率要更高,但是显示会相对单一。
该教程讲解的主要是 GDB 的字符界面的操作使用。因为 GDB 的字符界面和 Linux 系统的操作相似,所以使用时更加容易上手。GDB 调试程序最主要是学习一些命令的使用,掌握了所有的命令也就学会了 GDB。GDB 的调试对象可以是可执行文件、core dump 和进程。该教程讲解的主要以调试可执行程序为主。
GDB 的功能非常的强大,相对于 Linux 开发环境下的其他的调试工具,GDB 可以实现的功能:
- 启动应用程序,可以按照调试人员自定义的要求运行程序,例如设置参数和环境变量。
- 可让被调试的程序在指定的调试断点处停住(断点可以是条件表达式)。
- 当程序停止执行时,可以检查此时程序中所有的状态。
- 动态改变程序。在程序运行中改变变量值和代码执行顺序,这样就可以尝试修改这个 BUG。
安装GDB调试工具
检测当前的系统中是否已经安装 GDB 可以在 shell 命令行输入:
gdb -v //查看 GDB 调试工具的版本信息。
如果出现如下的信息,就说明当前的系统中已经安装过 GDB 调试工具。
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
如果没有,说明当前的系统中没有安装,可以通过以下两种方法进行安装:
- 使用命令安装,例如,Ubuntu系统安装GDB,命令行输入:sudo apt-get install gdb。
- 下载 gdb 的源码包。源码包得获取方式:http://ftp.gnu.org/gnu/gdb。
源码包安装GDB流程
以 GDB 的 9.1 版本为例。
(1) 解压下载的压缩包:
tar -xvf gdb-9.1.tar.gz
(2) 切换路径到解压后的文件 9.1-gdb 中,创建一个目录文件 build:
mkdir build
(3) 执行命令:
../configure
或者是
9.1-gdb/configure
(4) build 目录下会生成 Makefile 等多个文件,需要使用 make 命令编译整个文件。执行 make 命令可能会花费很长的时间,所以推荐使用 make 的多线程模式:
make [-j(n)] //[-j(n)] 是可选参数,n 表示的是要开启的线程数,与 CPU 相关,不能超过 CPU 支持的最大线程数
(5) 最后执行安装命令
make install
(6) 测试是否安装成功,命令行输入:
gdb -v