Linux-gdb调试

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。他是学习指针、调试程序非常有用的工具和方法
gdb的常见命令:

简写 全称 备注
l list 显示指定行号或者指定函数附件的源代码
b break 在指定行号或者指定函数开头处设置断点。如 b main
r run 运行程序,直到程序结束或者遇到断点而停下
c continue 在程序中断后继续执行程序,直到程序结束或者遇到断点而停下。注意在程序开始执行前只能用r,不能用c
n next 执行下一条语句。如果有函数调用,则把它作为一个整体
s step 执行下一条语句。如果有函数调用,则需要进入调用函数
u until 执行到指定行号或者是指定函数的开头
p print 显示变量或表达式的值
disp display 把一个表达式设置为display,当程序每次停下来时都会显示其值
d delete 取消断点,和b的格式相同。如果该位置有多个断点,将同时取消
i info 显示各种信息。如 i b 显示所有断点,i disp显示display,而i lo显示所有局部变量
watch watch 可以使用watch为表达式(变量)expr设置一个观察点。当表达式值有变化时,马上停住程序

实例:

 1#include<stdio.h>
 2 
 3 void swap(int *a, int *b)
 4 {
 5     int     t = *a;
 6     *a = *b;
 7     *b = t;
 8 }
 9
 10 int main()
 11 {
 12     int     a = 3;
 13     int     b = 4;
 14     swap(&a, &b);
 15
 16    printf("%d %d\n", a, b);
 17   return 0;
 18 }
/* 第一步:编译程序 */
gcc -g swap.c -std=c99
 /* 第二步:运行gdb */
gdb a.out
 /* 第三步:查看源代码 */
(gdb)l
 1#include<stdio.h>
 2
 3 void swap(int *a, int *b)
 4 {
 5     int     t = *a;
 6     *a = *b;
 7     *b = t;
 8 }
 9
 10 int main()
 11 {
 12     int     a = 3;
 13     int     b = 4;
 14     swap(&a, &b);
 15
 16    printf("%d %d\n", a, b);
 17   return 0;
 18 }
/* 第四步:加断点并且运行。*/
(gdb)b 8
Breakpoint 1 at 0x4004ee: file swap2.c, line 8.

(gdb)r
Starting program: /home/zhoupiaolong/cstudy/a.out 

Breakpoint 1, swap (a=0x7fffffffe4ec, b=0x7fffffffe4e8) at swap2.c:8
8       }
 * /第五步:查看调用栈 */
(gdb)bt
#0  swap (a=0x7fffffffe4ec, b=0x7fffffffe4e8) at swap2.c:8
#1  0x0000000000400519 in main () at swap2.c:14
(gdb) p a
$1 = (int *) 0x7fffffffe4ec
(gdb) p b
$2 = (int *) 0x7fffffffe4e8
(gdb) p *a
$3 = 4
(gdb) p *b
$4 = 3
(gdb) up
#1  0x0000000000400519 in main () at swap2.c:14
14          swap(&a, &b);
(gdb) p a
$5 = 4
(gdb) p b
$6 = 3
(gdb) p &a
$7 = (int *) 0x7fffffffe4ec
(gdb) p &b
$8 = (int *) 0x7fffffffe4e8

之前对于gdb还停留在命令行,没想到gdb居然有可视化调试界面,真的是太猛了,只有你想不到的!!!没有做不到的。

但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可以进入一个类似的可视化的调试界面。

Linux-gdb调试_第1张图片

具体使用方法可以看这篇链接里面有详细的命令介绍

你可能感兴趣的:(Linux实用工具)