一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:
$gcc -g -Wall hello.c -o hello $g++ -g -Wall hello.cpp -o hello
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。
启动GDB的方法有以下几种:
- gdb <program>
- program也就是你的执行文件,一般在当前目录下。
- gdb <program> core
- 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
- gdb <program> <PID>
- 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
以上三种都是进入gdb环境和加载被调试程序同时进行的。也可以先进入gdb环境,在加载被调试程序,方法如下:
*在终端输入:gdb *在gdb环境中:file <program> 这两步等价于:gdb <program>对于gdb常用的调试方式,也基本都会,但是当被问到如何对已经运行的程序进行调试时,就不知道怎么处理了,因此在网上查找资料发现可以通过以下方式
首先,要求被调试的程序在-g编译的前提下,
先开个新的窗口ps -u 找到需要调试对应的进程编号
然后进入gdb 通过 使用attach+进程编号的方式,就可以对该进程进行调试了,结下了的如查看 修改值等类似于gdb常规的调试方式。