基于linux系统下程序调试---gdb调试

1、GDB介绍

GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下: 

  • 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 
  • 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 
  • 当程序被停住时,可以检查此时你的程序中所发生的事。 
  • 动态的改变你程序的执行环境。

2、编译

如果要用GDB调试程序我们必须在编译时要把调试信息加到可执行文件中,在利用编译器(cc/gcc/g++)编译程序时加上 -g 参数

gcc -g HelloWorld.c -o HelloWorld

g++ -g HelloWorld.cpp -o HelloWorld

如果没有-g参数,你将看不见程序的函数名、变量名,而全是运行时的内存地址。

3、GDB 的启动命令

命令

命令缩写

命令说明

list

l

显示多行源代码

break

b

设置断点,程序运行到断点的位置会停下来

info

i

描述程序的状态

run

r

开始运行程序

display

disp

跟踪查看某个变量,每次停下来都显示它的值

step

s

执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句

next

n

执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)

print

p

打印内部变量值

continue

c

继续程序的运行,直到遇到下一个断点

set var name=v

设置变量的值

start

st

开始执行程序,在main函数的第一条语句前面停下来

file

装入需要调试的程序

kill

k

终止正在调试的程序

watch

监视变量值的变化

backtrace

bt

产看函数调用信息(堆栈)

frame

f

查看栈帧

quit

q

退出GDB环境

4、启动带参数的程序

gdb --args ./demo arg1 arg2....

5、基本应用

  • gdb 调试多线程1
  1. (gdb) info threads                      ->可以列出所有的线程,当前的线程前面有一个*号
  2. (gdb)thread ID                           ->把当前线程设成ID,然后就可以查看相关信息
  3. (gdb)bt                                       ->将列出栈的调用情况,以及对应源代码中的位置,此时谨慎察看对应代码,一般必有结果

6、 gdb XXXX core.18164

      bt

注意:使用gdb必须运行:ulimit -c unlimited

推荐一个详细的“GDB调试命令详解”地址希望可以学的更多:

1、https://blog.csdn.net/Linux7985/article/details/52399439

2、https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html

扩展:

linux提示符
1. GDB进入正在运行的进程
    gdb 可执行文件 core文件 
    gdb -p pid
    
GDB提示符
1. 查看调用栈信息
    bt / backtrace / bt full
    frame n
    info locals
    info args

2. 查看、设置变量
    p 变量
    p 变量 = 新值
    set 变量 = 新值
    
3. 查看内存
    x/<n/f/u> <addr>

4. 线程调试
    info thread
    thread n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值