gdb调试工具的基本用法

一、基本命令

gcc -g test.c -o test      #编译时生成debug有关的程序信
gdb test                 #启动调试
help                     #查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
run                     #重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
start                     #单步执行,运行程序,停在第一执行语句
list                     #查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
set                     #设置变量的值
next                     #单步调试(逐过程,函数直接执行),简写n
step                     #单步调试(逐语句:跳入自定义函数内部执行),简写s
backtrace                 #查看函数的调用的栈帧和层级关系,简写bt
frame                     #切换函数的栈帧,简写f
info                     #查看函数内部局部变量的数值,简写i
finish                     #结束当前函数,返回到函数调用点
continue                 #继续运行,简写c
print                     #打印值及地址,简写p
quit                     #退出gdb,简写q
break+num                 #在第num行设置断点,简写b
info breakpoints         #查看当前设置的所有断点
delete breakpoints num     #删除第num个断点,简写d
display                 #追踪查看具体变量值
undisplay                 #取消追踪观察变量
watch                     #被设置观察点的变量发生修改时,打印显示
i watch                 #显示观察点
enable breakpoints         #启用断点
disable breakpoints     #禁用断点
x                         #查看内存x/20xw 显示20个单元,16进制,4字节每单元
run argv[1] argv[2]     #调试时命令行传参
set var 变量名=value     设置变量的值

set follow-fork-mode parent

set follow-fork-mode child

二、调试core文件

        程序挂掉时(比如出现段错误时),系统缺省不会生成core文件
        (1) ulimit -a 查看系统参数


        (2)ulimit -c unlimited 把core文件的大小设为无限制

                  先切换到root用户,输入这个命令 echo core >/proc/sys/kernel/core_pattern(设置core文件出现在当前路径),再执行ulimit -c unlimited
        (3) 运行程序,生成core文件 ;


        (4)gdb 程序名 core文件名(gdb ./main core)

从图中就可以看出是在 bb函数中出现的段错误 

 三、调试正在运行的程序

        先找到正在运行程序的进程号,然后执行 gdb ./main -p 进程号,这时候正在运行的程序就会暂停,这时调试就跟普通调试一样了。

四、调试多进程程序

        调试父进程: set follow-fork-mode parent (缺省)

        调试子进程: set follow-fork-mode child
        设置调试模式:set detach-on-fork [onloff],缺省是on 表示调试当前进程的时候,其它的进程继续运行,如果用off调试当前进程的时候,其它的进程被gdb挂起。
        查看调试的进程:info inferiors

        切换当前调试的进程: inferior 进程id

五、调试多线程程序

        在shell中执行
        查看当前运行的进程: ps aux| grep book

        查看当前运行的轻量级进程: ps -aL |grep book

        查看主线程和新线程的关系: pstree -p 主线程id

        在gdb中执行
        查看线程: info threads

        切换线程: thread 线程id

        只运行当前线程: set scheduler-locking on

        运行全部的线程: set scheduler-locking off

        指定某线程执行某gdb命令: thread apply 线程id cmd

        全部的线程执行某gdb命令: thread apply all cmd

六、利用日志文件来调试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值