【Linux】简述gdb

一.简介

GDB是一个由GUN开源组织发布的,UNIX/LINUX操作系统下的,基于命令行的程序调试工具。

release版本和debug版本区别

在Debug:Debug 通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供 强大的应用程序调试能力。

Release:Release通常称为 发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

(在Linux下,我们编译代码时,默认是release版本。想让代码以debug形式发布,需要使用gcc -g)

二.使用

1.启动gdb

1.1.编译一个测试程序,-g表示可以调试

gcc -g test.c -o test

1.2.启动gdb

gdb test

2.查看源码

l(list):查看看程序代码,默认显示10行,l命令到代码末后继续l。

(1)l  数字num

表示查看num周围10行代码。l 1可从头查看源码。

(2)l -

表示查看上一个l命令查看的代码之前的10行

(3)l 数字num1,数字num2

表示查看num1-num2行的源码

(4)l 函数名

表示查看函数周围10行代码

(5)l 文件名XX:数字num

表示查看XX文件中第num行周围10行代码

(6)l 文件名XX:函数名f

表示查看XX文件中函数f周围10行代码

3.运行程序

(1)r(run):运行程序,直到遇到结束或断点停止

(2)start:执行程序至 main() 主函数的起始位置停止

1、默认情况下,run 指令会一直执行程序,直到执行结束。如果程序中手动设置有断点,则 run 指令会执行程序至第一个断点处;
2、start 指令会执行程序至 main() 主函数的起始位置,即在 main() 函数的第一行语句处停止执行(该行代码尚未执行)

start 指令启动程序 == 先在 main() 主函数起始位置设置一个断点,然后再使用 run 指令启动程序

4.设置断点

(1)b(break):在某行设置断点

用法:b+行号num

(2)info b(info breakpoints):显示当前程序的断点信息

其中每一列含义如下:

Num: 断点编号
Disp:断点执行一次之后是否有效( kep:有效      dis:无效)
Enb: 当前断点是否有效 (y:有效        n:无效)
Address:内存地址
What:位置

(3)d(delete):删除断点

用法:d+断点号num

(4)disable:暂停第n个断点

用法:disable+断点号n

(5)enable:开启第n个断点

用法:enable+断点号n

(6)clear:清除第n行断点

用法:clear+行号n

5.单步执行

(1)s:逐语句(类似vs的F11),会进入函数内部

(2)n:逐过程 (类似vs的F10)不会进入函数,直接调用函数

6.查看变量

(1)p(printf):打印表达式,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。

用法:

print a:将显示整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将显示字符串 name 的值
print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数

7.退出gdb

q(quit)


指令补充:

1、查看运行信息
where/bt :当前运行的堆栈列表;
bt backtrace 显示当前调用堆栈
up/down 改变堆栈显示的深度
set args 参数:指定运行时的参数
show args:查看设置好的参数
info program: 来查看程序的是否在运行,进程号,被暂停的原因。

2、运行命令
continue (简写c ):继续执行,到下一个断点处(或运行结束)
until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
until+行号: 运行至某行,不仅仅用来跳出循环
finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)

参考原文链接:https://blog.csdn.net/niyaozuozuihao/article/details/91802994

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值