当前位置:网站首页>gdb的简单使用
gdb的简单使用
2022-06-09 10:53:00 【拉普拉强】
文章目录
安装
yum install -y gdb
程序带调试信息的编译
程序必须以gcc -g的参数进行编译,否则无法使用gdb
gdb的使用
断点的增删改查
b 函数名 # 加断点-方式1
b 行号 # 加断点-方式2
info break # 查看所有断点
delete 断点编号 # 删除断点,不加编号是删除所有断点
disable 断点编号 # 禁用断点,而不是不删除
enable 断点编号 # 启用断点
给程序输入运行参数
相当于是argv[n]
1. gdb /usr/sbin/nfv_slb_sp # 进入gdb调试模式
2. set args -- -l 1-4 -w 0000:00:08.0 -w 0000:00:09.0 # 后面那一串作为参数输入,如果参数中包含特殊字符,那么可以把整个参数用双引号包起来
# 上面这步等效于/usr/sbin/nfv_slb_sp -- -l 1-4 -w 0000:00:08.0 -w 0000:00:09.0
3. show args # 查看运行参数
调试运行中的程序
1.1. gdb attach pid # 入侵正在运行的程序,此时程序会暂停,退出去之后,进程会继续跑
1.2. gdb 进程名 -p pid # 作用同1.1
2. 使用bt查看函数的调用栈
调试coredump文件
1. gdb 进程名 coredump文件名 # 打开coredump文件
2. 使用bt或where查看程序在哪一行出问题
调试多进程
如果是运行中的进程,我们能分别获取到父、子进程的pid,通过attach到不同的pid上,可以分别对父子进程调试
调试父进程
1. gdb 进程名
2. 设置断点
3. 此时父进程会暂停,子进程继续运行
4. gdb退出后,父进程停止,子进程变成孤儿进程继续运行
调试子进程
1. gdb 进程名
2. set follow-fork-mode child
3. 设置断点
4. 此时子进程会暂停,父进程继续运行
5. gdb退出后,子进程会退出,父进程在
设置调试模式
set detach-on-fork [on|off] # 默认是on,on表示调试当前进程的时候,其他进程继续运行;off表示调试当前进程的时候,其他进程被gdb挂起
显示当前进程信息
(gdb) info inferiors
Num Description Executable
* 1 process 2591 /home/jiangxianqiang/github/jiangxianqiang/function/main5
#如果设置了set detach-on-fork off,gdb挂起父子进程,使用info inferiors就能看到两个进程信息
(gdb) info inferiors
Num Description Executable
2 process 2857 /home/jiangxianqiang/github/jiangxianqiang/function/main5
* 1 process 2853 /home/jiangxianqiang/github/jiangxianqiang/function/main5
进程间切换
(gdb) info inferiors
Num Description Executable
2 process 2857 /home/jiangxianqiang/github/jiangxianqiang/function/main5
* 1 process 2853 /home/jiangxianqiang/github/jiangxianqiang/function/main5
(gdb) inferior 2 #注意这边切换使用的是进程ID,不是linux的pid
(gdb) info inferiors
Num Description Executable
* 2 process 2857 /home/jiangxianqiang/github/jiangxianqiang/function/main5
1 process 2853 /home/jiangxianqiang/github/jiangxianqiang/function/main5
调试多线程
查看线程信息
ps -aL | grep 进程名 # 查看主线程和子线程
pstree -p 主线程id # 查看主线程和子线程之间的关系
- info threads: 查看线程信息
- thread 线程编号: 切换线程
- set scheduler-locking on:只运行当前线程,其他线程被挂起
- set scheduler-locking off:运行全部线程
- thread apply 线程NUM 命令:仅对指定线程执行特定命令
- thread apply all 命令:所有线程执行特定命令
边栏推荐
猜你喜欢
随机推荐
[buuctf.reverse] 111 [b01lers2020] chugga Chugga
[buuctf.reverse] 103_ [CFI-CTF 2018]powerPacked
终于有人把大数定律讲明白了
Computer selection 1
Multi engine database management tool DataGrid 2022.1.5 Chinese version
The most complete knowledge summary, which must be read by beginners
第三章运输层
[buuctf.reverse] 104_ [FlareOn1]Shellolololol
RDMA Verbs API
Simple example of C # picture verification code
使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的“心路(累)历程“
Easyrecovery15 free data recovery software
The latest Camtasia 2022 free computer screen recording tool
No provider available for the service
【SystemVerilog 之数据类型】~ 数据类型、Logic 类型、数组
redis中的string类型是怎么组织的?
Possible causes of processing chain loading error -process chain loading error
The method of array traversal in JS
DM platform management - NETCORE
Music creation tool Steinberg Cubase Pro









