GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
gdb +程序名 运行(gdb main)
使用 "--tui" 参数,可以在终端窗口上部显示一个源代码查看窗。
gdb --tui main
list(l) 查看最近10行源码
list fun 查看fun函数源码
list file:fun 查看file文件中的fun函数源码
list num1 num2 查看num1~num2行的源码
break 行号
break fun 在函数处设置断点
break file:行号
break file:fun
break if <condition> 条件成立时程序停住
info break (i b)查看断点
watch expr 当expr的值发生改变时,程序停住
delete n 删除断点
run/r 启动程序
continue(c) 运行至下一个断点
step(s) 单步跟踪,进入函数
next(n) 单步跟踪,不进入函数
finish 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数信息
until 运行程序直到程序退出循环体
print i (p i) 查看变量的值
ptype 查看变量类型
print array 查看数组
print *array@len 查看动态内存
print x=5 改变运行时的数据
print &array 查看数组的地址
回车代表上一个命令
core文件
在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump
设置生成core文件
ulimit -c 查看core-dump状态
ulimit -c 数字
ulimit -c unlimited
gdb利用core文件调试
gdb 文件名 core文件
Backtrace(bt) 查看堆栈
多线程调试
info threads 显示当前可调试的所有线程
thread ID 切换当前调试的线程为指定ID的线程
attach process-id 在gdb状态下,开始调试一个正在运行的进程
thread apply all command 所有线程执行command
下面给大家一个好玩的多线程程序,答案就在某个线程的堆栈中,先不要看下面的答案,自己试着用gdb玩一下哈(Linux 64bit)。
http://download.csdn.net/detail/nk_test/9452236
答案在下面图中,先不要看。。
The answer is orangutan.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2015-06-30 H264(NAL简介与I帧判断)
2015-06-30 U_boot 的 bootcmd 和bootargs参数详解
2015-06-30 挂载与卸载
2015-06-30 windows客户端连接到samba服务器(如何使用samba)
2015-06-30 malloc、calloc、realloc的区别
2014-06-30 基于Boost的数据处理器及线程安全类和信号量
2014-06-30 boost 轻量级信号量