论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
【Linux】开始使用gdb吧!
【Linux】开始使用gdb吧!
灌篮少年
金牌会员
|
2024-9-30 17:48:14
|
显示全部楼层
|
阅读模式
楼主
主题
974
|
帖子
974
|
积分
2922
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
当然有了 它就是 gdb :
Linux下的gdb(GNU Debugger)是一款强大的调试工具,对于程序员来说,把握gdb的使用本事是开发过程中必不可少的技能。根据Statista的数据,截至2023,Linux在举世服务器利用系统市场占据近37%的份额,这使得gdb成为了许多专业人士必备的工具。
。
本文将介绍怎样使用gdb。
1 下载安装
首先我们要确保已经安装gdb,可以通过 gdb -version来举行间接检察。
未安装使用sudo yum -y install gdb 下载安装即可。
2 开始使用
首先辈入gdb直接使用:gdb 文件名
接下来我直接给出 gdb 的 全部功能命令(注意简写形式,会常常使用):
list /l 行号:显示指定行号附近的源代码,
每次显示10行,从当前光标位置向下滚动
。
list /l 函数名:
显示指定函数的完整源代码
。
r 或 run:
开始执行程序
。
n 或 next:
执行下一条语句,不会进入函数内部
。相当于 F10
s 或 step:执行下一条语句,如果
下一条语句是函数调用,则进入该函数内部
。 相当于 F11
break(b) 行号:在指定的行号设置断点。相当于 F9
break 函数名:在指定函数的开头设置断点。
info break:
显示全部断点的信息
。
finish:执行当前函数的剩余部分,直到函数返回,然后停息程序。
print ( p ) 表达式:盘算并打印表达式的值。
p 变量:
打印变量的值
。
set var:
修改变量的值
。
continue(或c):
继续执行程序,直到下一个断点或程序结束
。相当于 F5
run(或r):从程序的开始处执行程序,直到程序结束或遇到断点。
断点相干利用
:
delete breakpoints:删除全部断点。
delete breakpoints n:删除指定编号的断点。
disable breakpoints:禁用全部断点。
enable breakpoints:启用全部断点。
ignore:忽略特定的断点。比方,ignore 1 main 会让断点1在主函数上失效
info(或i) breakpoints:显示当前设置的全部断点。
监督相干利用
:
display 变量名:跟踪指定变量的值,并在每次程序停息时显示它。
undisplay:取消对先前设置的变量的跟踪。
until X行号:继续执行程序,直到达到指定的行号。
breaktrace(或bt):显示程序的调用栈,包括全部函数的调用和参数。
info(i) locals:显示当前函数栈帧中局部变量的值。
quit:退出GDB。
3 实践运用
接下来我们在实践中加深对gdb的认识:
首先我们编写一段简朴程序:
1 #include<iostream>
2 using namespace std;
3
4 int main(){
5 int i = 0;
6 int j = 100;
7
8 while(i < 100){
9 int sum = i + j;
10 i++;
11 j -= 2;
12 }
13
14 for(int k = 0;k<10;k++){
15 cout<<"hello bit"<<endl;
16 }
17
18
19 return 0;
20 }
复制代码
然后我们直接进入gdb
出乎意料的是 再使用list出现了报错(No symbol table is loaded. Use the “file” command.)!!!
这是因为 gdb利用的应该是编译后的文件
当编译时,未加 - g 选项,则进入gdb环境中执行命令会出现No symbol table is loaded. Use the “file” command.提示;
一定要举行gcc/g++ -g test.c -o test利用哦。
这样就好了:乐成显示出我们代码
接下来我们打开监督,来看看每个变量的变革。我们先打上断点来进入主函数:
然后逐个 display 展示即可:
然后调试(continue、step、next)就好,可以清楚看到每个变量的值
我们来试试断点的快速移动:
我们直接就跳出了正在举行的while循环,来到14行了。
其他指令就不举行探索了,认识使用就可以了。
增补一下 print 的 功能 (类似监督窗口的作用)和显示堆栈的功能
print 表达式:简记为 p ,此中“表达式”可以是任何当前正在被测试程序的有用表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有用表达式,包括数字,变量以致是函数调用。
print a:将显示整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将显示字符串 name 的值
print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
watch 表达式:设置一个监督点,一旦被监督的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
whatis :查询变量或函数
info function: 查询函数,扩展info locals: 显示当前堆栈页的全部变量
堆栈:
where/bt :当前运行的堆栈列表;
bt backtrace 显示当前调用堆栈
up/down 改变堆栈显示的深度
set args 参数:指定运行时的参数
show args:检察设置好的参数
info program: 来检察程序的是否在运行,进程号,被停息的原因。
Thanks♪(・ω・)ノ谢谢阅读!!!
下一篇文章见!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
灌篮少年
金牌会员
这个人很懒什么都没写!
楼主热帖
【靶场】THM-Pickle Rick-练习
【WinUI3】ListView / GridView 学习总 ...
每日算法之二叉搜索树的后序遍历序列 ...
Dubbo原理解析(非常透彻)
SAP WM高阶之下架策略M(Small Large Qu ...
【邂逅Django】——(一)创建项目 ...
JDBC核心技术
线程池
K3S系列文章-使用AutoK3s在腾讯云上安 ...
Arrya类常见方法学习
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
分布式数据库
快速回复
返回顶部
返回列表