Linux开发工具01:使用GDB调试代码

写在前面

  • 这里主要记录一下如何使用GBD进行调试;

一、安装GDB

mkdir gdb
cd gdb
# 下载压缩包
wget http://ftp.gnu.org/gnu/gdb/gdb-13.1.tar.gz
  • 而后解压并使用make安装:
# 解压
tar -zxf gdb-13.1.tar.gz

cd gdb-13.1
# 生成makefile文件
./configure
# 实际编译代码,生成可执行文件
make
# 将编译的结果安装到系统中,需要开root权限
make install

# 查看是否安装成功
gdb -v

补充:一些安装错误

sudo apt-get install libgmp-dev
  • (2) 通过官网下载压缩包编译安装:
# 安装GMP库依赖
sudo apt-get install m4

# 下载压缩包
mkdir gmp
wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
# 解压
xz -d gmp-6.2.1.tar.xz && tar xvf gmp-6.2.1.tar
cd gmp-6.2.1
# 生成makefile文件
./configure --prefix=/usr  --enable-cxx
# 实际编译代码,生成可执行文件
make
# 将编译的结果安装到系统中,需要开root权限
make install

二、使用

1. 载入可执行文件

gdb xxx(路径/可执行文件名)

2. 查看代码

(gdb) list
# 简写形式
(gdb) l

3. 添加断点

(gdb) break 行数
# 简写形式
(gdb) b 行数
# 查看当前所有的断点
(gdb) info break

4. 运行调试

(gdb) run
# 简写形式
(gdb) r

5. 查看变量值

  • 在运行时才能查看;
(gdb) print 变量名或者表达式
# 简写形式
(gdb) p 变量名或者表达式

6. 添加变量监视

  • 在运行时才能添加变量监视;
  • 当发生了监视变量值修改时,就会自动暂停程序;
    • 相当于是在修改变量值的下一行打了断点;
    • 同时自动打印变量修改的前后值;
(gdb) watch 变量名
# 查看当前所有监视的变量
(gdb) info watch

7. 继续运行程序

  • 在断点暂停之后才能继续运行;
(gdb) continue
# 简写形式
(gdb) c

8. 单步执行

  • 在断点暂停之后才能单步执行;
(gdb) next
# 简写形式
(gdb) n

9. 跳入和跳出函数

  • 在断点暂停之后才能跳入跳出函数;
# 跳入函数
(gdb) step
(gdb) s

# 跳出函数
(gdb) finish

10. 终止当前调试过程

  • 如果想重新从头开始调试,则需要先终止当前调试过程;
# 终止当前调试过程
(gdb) kill
  • 然后就可以用run命令重新从头开始调试;
    • 断点的设置仍在,不需要重新设置;

三、多线程调试

1. 多线程断点

  • 仍然是使用break 行号设置断点;
  • 运行到多线程中的任意一个断点,就会阻塞所有线程进入调试;
  • 当前默认的调试线程是发生断点的线程

2. 查看当前所有线程

  • 使用info threads可以查看当前所有线程的信息;
  • 其中:
    • Id是GDB分配给每个线程的序号,一般是按照创建顺序分配的;
      • 主线程通常是1
    • *表示当前正在调试线程序号;
      • 可以通过thread Id切换到其他线程进行调试;
# 查看所有线程信息
(gdb) info threads
  • 一个例子如下:
    查看所有线程信息

3. 切换线程

  • 在断点暂停后可以切换到其他线程进行调试;
  • 首先使用info threads查看当前的线程情况;
  • 然后可以用thread Id切换线程;
# 切换线程
(gdb) thread 线程id

4. 只继续运行当前线程

  • 默认情况下,在断点暂停后执行continue命令是所有线程同时恢复运行的;
  • 但GDB还允许只恢复运行当前调试的线程;
    • 这可以很方便地集中于当前线程的问题处理;
    • 待处理完成后再恢复所有线程的运行;
# 设置只运行当前调试线程
(gdb) set scheduler-locking on
# 只恢复运行当前调试线程
(gdb) continue

# 设置恢复运行所有线程
(gdb) set scheduler-locking off
# 恢复运行所有线程
(gdb) continue
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值