Linux命令之gdb
0. 简述
GDB(GNU symbolic debugger)简单地说就是一个调试工具。它是一个受通用公共许可证即GPL保护的自由软件。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG
正因为GDB是linux下最常使用的程序调试器,因此,在我们面试各大公司的时候,使用GDB调试程序,又是相对比较容易被问到的。因为对GDB的了解,最能直观反映应聘者对Linux环境编程是否熟悉。因此我们结合海量面经,提取出了几个最容易被问到的GDB使用问题,供大家参考。
- 使用gdb调试程序的前提是什么
- 使用gdb如何在程序中逐步调试
- 使用gdb如何在程序中打断点
- 使用gdb如何查看函数调用栈
1 Linux命令之GDB
1.1 使用规则及高频选项
gdb [选项] 程序名称
-p #指定一个pid,调试正在运行的程序
1.2 高频调试指令
命令名称 | 说明 | 简写使用示例 |
---|---|---|
run | 直接运行程序 | r -l -p |
start | 开始逐步调试 | start -l -p |
list | 显示调试行附近代码 | l main.c:10 |
next | 执行当前行代码,进入下一行, 若当前行是函数则直接将函数运行完毕 |
n |
step | 执行当前行代码,进入下一行, 若当前行是函数,则进入函数进行调试。 |
s |
continue | 从当前停止的位置开始继续运行 | c |
break | 打断点,程序运行到断点位置停下来 | b main.c:10 |
info break | 查看断点信息 | i b |
delete | s删除断点 | d 2 |
backtrace | 查看程序运行调用栈信息 | backtrace |
打印变量数据 | p var_name | |
quit | 退出调试 | q |
run [运行参数]
start [运行参数]
list
1.3 调试代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int gval = 100;
int mycopy(char *buf)
{
strcpy(buf, "我爱我的祖国");
return gval;
}
int main()
{
int i = 0;
printf("gval:%d\n", gval);
for (i = 0; i < 10; i++) {
gval += i;
printf("gval:%d\n", gval);
}
char *buf = "我爱我家";
printf("%s\n", buf);
buf = NULL;
mycopy(buf)