Black学Linux+GDB调试

GDB调试

什么是GDB

  • GDB 是自由软件基金会(Free Software Foundation)的软件工具之一。它的作用是协助程序员找到代码中的错误。如果没有GDB的帮助,程序员要想跟踪代码的执行流程,唯一的办法就是添加大量的语句来产生特定的输出。但这一手段本身就可能会引入新的错误,从而也就无法对那些导致程序崩溃的错误代码进行分析。
  • GDB的出现减轻了开发人员的负担,他们可以在程序运行的时候单步跟踪自己的代码,或者通过断点暂时中止程序的执行。此外,他们还能够随时察看变量和内存的当前状态,并监视关键的数据结构是如何影响代码运行的。

如何进行GDB调试

gcc -g debugme.c -o debugme

产生debugme文件

gdb debugme   
  • 如果一切正常,GDB将被启动并在屏幕上输出版权信息,但如果使用了-q或–quiet选项则不会显示它们。启动GDB时另外一个有用的命令行选项是“-d dirname”,其中dirname是一个目录名。该目录名告诉GDB应该到哪里去寻找源代码。
  • 一旦出现GDB的命令提示符(gdb),就表明GDB已经准备好接收来自用户的各种调试命令了。如果想在调试环境下运行这个程序,可以使用GDB提供的 “run”命令,而程序在正常运行时所需的各种参数可以作为“run”命令的参数传入,或者使用单独的“set args”命令进行设置。如果在执行“run”命令时没有给出任何参数,GDB将使用上一次“run”或“set args”命令指定的参数。如果想取消上次设置的参数,可以执行不带任何参数的“set args”命令。
    (gdb)run …
  • 一些GDB调试的基本参数
命令缩写命令缩写
listl显示多行源代码
breakb设置断点,程序运行到断点的位置会停下来
infoi描述程序的状态
runr开始运行程序
displaydisp跟踪查看某个变量,每次停下来都显示它的值
steps执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句
nextn执行下一条语句,不进入函数内部
printp打印内部变量值
continuec程序继续运行,直到遇见下一个断点
set var name=v设置变量的值
startst开始执行程序,在main函数的第一条语句前面停下来
file装入需要调试的程序
killk终止正在调试的程序
watch监视变量值的变化
backtracebt查看函数调用信息(堆栈)
framef查看栈帧
quitq退出GDB环境
  • 调试示例:
    list //先显示多行代码,观察需要设置断点处的行号
    break linenum //再在需要设置断点处的行号下设置断点
    run //将程序直接运行到断点处
    step //进入断点处的函数,执行其中的第一条语句
    next //下一步,不进入函数内部
    print var //显示变量var的值
    break 25 if num == 1 //如果num的值为1,则在第25行设置一个断点,这为条件断点
    whatis str //观察str是什么类型的变量
    delete 25 //删除在25行处的断点
    continue //继续执行程序,直到遇见下一个断点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值