gdb工具介绍

目录

一、gdb的常用命令

二、调试的步骤

三、段错误调试


Linux软件开发人员,必须会的4个工具:

  • **gcc:**编译器把源文件转换为可执行程序
  • **vim:**linux下的文本编辑器
  • gdb:调试器,检查程序的逻辑错误
  • **makefile:**工程管理工具

一、gdb的常用命令

|------------|--------------------------------|-------------------------|
| 命令 | 说明 | 演示 |
| r,run | 运行程序 | r ; r 123 (./a.out 123) |
| where / bt | 查看栈结构(逆序),函数调用关系 | where ; bt |
| b | break,设置断点。代码暂停的位置 | b 14 ; b fun ; b 1.c:16 |
| n | next,程序下运行一部。如果是函数的,函数执行完毕。 | n |
| s | step into,程序下运行一步。如果是函数的,进入函数体 | s ; 自定义函数 |
| p | print 显示变量的内容 | p a ; p *a |
| display | 显示变量的内容,一直显示变量 | display a |
| c | continue,运行到下一个断点处 | c |
| return | 跳出函数,回到函数的调用处,继续运行。 | return |
| l | list 显示源代码,从main所在.c开始显示,每次10行 | l ; l 10 |
| q | quit,退出gdb | q |

二、调试的步骤

1.编译自己代码的时候假如调试选择-g 给a.out假如调试信息

gcc -g 1.c

2.启动调试器

gdb ./a.out

3.设置断点(希望程序运行起来后,暂停在某一个位置)

b16 -> break设置断点在 main 函数所在的第 16 行方式1

b1.c:36 -> 多文件中,断点设置 1.c 的第36行

b fun -> 断点设置在 fun 函数,只要 fun 被调用,就会暂停

4.让程序运行起来

r -> run 运行程序

r 1 2 -> run运行程序。如果你的程序需要命令行参数时候,/a.out12

5.这个时候,程序应该就暂停在断点的地址

p变量 -> print 查看变量

p指针

p*指针

6.程序向下运行一步,继续找错误

当前的代码中,是否有函数调用

n -> next 函数就执行完(步过)

s -> step ino 进入函数体一步运行(步入)

7.5-6 步的循环,直到找到错误。

三、段错误调试

1.编译自己代码的时候截图调试选择-g

gcc -g 1.c

2.启动调试器

gdb ./a.out

3.让程序运行起来,因为不知道程序哪个地方出现段错误,不需要下断点

r -> run 运行程序

r12 -> run 运行程序。如果程序需要命令行参数时候 ./a.out 1 2

4.重现错误,如果程序需要输入的话,在这个地方进行输入,如果没有就跳过。等待多错误出现。

5.出现段错误后,输入where或bt,查看栈结构。

启动gdb可以看到源码的模式。

layout src

相关推荐
keyipatience4 分钟前
21,22 (半)深入理解Linux重定向与缓冲区机制
linux·运维·服务器
SoftLipaRZC9 分钟前
C语言内存函数完全指南:memcpy/memmove/memset/memcmp
c语言·开发语言
fengyehongWorld9 分钟前
Linux command 命令
linux
坤昱12 分钟前
cfs调度类深入解刨——最新内核细节分析3
linux·linux内核·deadline·cfs调度·eevdf·kernel 7.1·最新内核调度
2301_8035389515 分钟前
CentOS版本差异详解和系统信息查看方法
linux·运维·centos
灰灰老师15 分钟前
Docker部署Tomcat9
java·linux·docker·tomcat
Cx330❀15 分钟前
【Qt 核心机制篇】深度解析 Qt 信号与槽(Signals & Slots)机制:从底层原理、实战演练到 Lambda 进阶
linux·开发语言·c++·人工智能·qt·ubuntu
田里的水稻16 分钟前
OE_临时配置网络_linux系统终端命令行ip setting
linux·网络·tcp/ip
Cx330❀19 分钟前
【Linux网络】从零构建高性能UDP服务器:从Echo到英译汉业务级实现
大数据·linux·服务器·开发语言·网络·c++·udp
金刚狼8823 分钟前
用atomic解决全局变量跨线程修改的问题
c语言