app网站开发哪里有,圣都装饰装修公司地址,网站建设公司自适应源码,手机如何自己编程做游戏文章目录 一、编译有调试信息的目标文件二、启动gdb调试文件1、查看内容list/l#xff1a;l 文件名:行号/函数名#xff0c;l 行号/函数名2、打断点b#xff1a;b文件名:行号/函数名#xff0c;b 行号/函数名 与 查看断点info/i#xff1a;info b3、删除断点d#xff1a;… 文章目录 一、编译有调试信息的目标文件二、启动gdb调试文件1、查看内容list/ll 文件名:行号/函数名l 行号/函数名2、打断点bb文件名:行号/函数名b 行号/函数名 与 查看断点info/iinfo b3、删除断点dd Num编号4、使能断点disable/enable 断点编号关闭/打开断点5、逐过程next/nF10与逐语句step/sF116、跳过断点continue/c运行至下一个断点处运行中的F57、查看变量内容或地址print/p8、显示变量内容或地址display长时间显示与关闭显示变量内容或地址undisplay9、运行结束函数并返回finish返回之后停下来10、跳转至指定行until 行号11、显示当前局部的全部变量info locals i locals12、改变一个变量原有的值set car 变量Num13、查看所在函数bt也显示进入函数前的函数14、查看所在行与所在函数f 总结 一、编译有调试信息的目标文件
正常情况下gcc或g编译链接之后都是不带调试信息的目标文件 这如同VS下的release编译需要加入选项-g来加入调试信息
正常编译release版本
gcc -o 目标文件 源文件 [使用标准]
例如gcc -o mytest.exe test.c -stdc99使用c99标准
g -o 目标文件 源文件 [使用标准]
例如gcc -o mytest.exe test.c -stdc11使用c11标准加入调试信息debug版本
gcc -o 目标文件 源文件 [使用标准]
例如gcc -o mytest.exe test.c -g -stdc99使用c99标准
g -o 目标文件 源文件 [使用标准]
例如gcc -o mytest.exe test.c -g -stdc11使用c11标准
与正常的release编译就多了一个选项-g这个使用标准可以不带但如果发现代码没问题又编译不过就加上使用标准试试 可以从文件大小来对比 可以从调试信息对比
指令readelf -S filename | grep -i debug
例如readelf -S test.exe | grep -i debug两个文件分别展示含debug的调试信息可以看到release文件是没有信息展示的
二、启动gdb调试文件
指令gdb filename
例如gdb test.exe
如果出现报错信息bash: gdb: command not found
看一下安装gdb能不能再次打开
root账号下yum -y install gdb
如果普通账号能提权就sudo yum -y install gdbgdb下常用指令集合
有些指令可以简写以VS对比
1、quit/q退出gdb
2、run/r运行程序类似F5没断点直接跑完
3、查看内容 list/ll 文件名:行号/函数名l 行号/函数名.c、.txt的普通文件不是可执行文件
4、打断点 bb文件名:行号/函数名b 行号/函数名类似F9
5、查看断点 info/i如info b
6、删除断点d Num编号
7、使能断点disable/enable 断点编号关闭/打开断点
8、逐过程next/nF10
9、逐语句step/sF11
10、跳过断点continue/c运行至下一个断点处运行中的F5
11、查看变量内容或地址print/p 变量名或取地址一次性
12、显示变量内容或地址display 变量名或取地址长时间显示
13、关闭显示变量内容或地址undisplay 显示编号
14、运行结束函数并返回finish运行结束所在函数就停下来
15、跳转至指定行until 行号中间的代码都是运行了的!
16、显示当前局部的全部变量info locals i locals
17、改变一个变量原有的值set car 变量Num
18、查看所在函数bt也显示进入函数前的函数
19、查看所在行与所在函数f1、查看内容list/ll 文件名:行号/函数名l 行号/函数名
有两种使用方法
1.查看其他文件的内容
2.查看正在调试的内容
list简写成l
指令是l filename:line其他文件 或者 l line正在调试的文件
或者显示函数line 函数名l filename:函数名例如l test.c:0 或者 l 0
指令这里的line是说显示第几行通常是把line的上下文打印line放中间显示以第0行为例 l test.c:0指定的文件通常是源文件 因为调试文件和.c文件一样展示的也一样 显示main函数 main函数放中间它的上下文打印显示行号的时候也是 显示的不是全部只是一部分而已 gdb默认记录最近的指令如果直接按回车则会打印显示接下来没显示的
2、打断点bb文件名:行号/函数名b 行号/函数名 与 查看断点info/iinfo b
打断点
指令b filename:line通常是编译前的源文件
b line
函数名也是一样的b 函数名或其他源文件的函数名查看断点
指令info b直接查看全部断点对函数和第几行打断点 函数名本质也是地址所以对函数打断点是打函数体内第一行打断点 而且也看到对于文件或调试的打断点打的断点也是源文件上的断点
3、删除断点dd Num编号
指令d Num断点编号
例如d 1
删除断点操作只能用编号删除删除后编号不重新整理删除存在的断点 删除之后使用info查看删除之后编号不会整理
4、使能断点disable/enable 断点编号关闭/打开断点
指令
关闭断点断点不起作用disable Num断点编号
关闭断点断点起作用enable Num断点编号
如同VS右击断点开启或关闭断点如图所示 关闭的断点调试时不起作用
5、逐过程next/nF10与逐语句step/sF11
指令
逐过程next/n如同VS调试的F10
逐语句step/s如同VS调试的F11逐过程F10 逐语句F11
6、跳过断点continue/c运行至下一个断点处运行中的F5
指令
运行至下一个断点处continue/c跳过断点同VS运行中的F5如图所示 如果再重新运行run/r则会询问是否重新开始运行
7、查看变量内容或地址print/p
指令
查看变量内容或地址print/p
例如p a 或 p a如图 这种显示方法是一次性的需要显示的时候要重新输入指令
8、显示变量内容或地址display长时间显示与关闭显示变量内容或地址undisplay
指令显示变量内容或地址display 变量名或取地址
关闭显示变量内容或地址undisplay 编号
例如
display adisplay a
undisplay Num显示变量内容或地址 显示的只能在本作用域显示跳到别的函数则不会显示 关闭显示变量内容或地址
9、运行结束函数并返回finish返回之后停下来
指令
运行结束函数并返回finish如图 这个方法可以快速的跳出函数并查看返回了什么
10、跳转至指定行until 行号
指令
跳转至指定行until 行号如图 通常来讲无法从一个函数内跳到另外一个函数但用来没打断点时跳过循环挺好的 在同一函数内像断点F9与F5的配合
11、显示当前局部的全部变量info locals i locals
指令
显示当前局部的全部变量info locals 简写为i locals可以看到显示的全部局部变量还没定义的也显示了并且是需要时再使用指令显示 说明是一次性的显示指令还会预先显示变量
12、改变一个变量原有的值set car 变量Num
指令
改变一个变量原有的值set car 变量Num
例如set var i50如图 这种是本质上改变变量的值让循环运算有种不确定的执行方法 这种设置方法可以面对特殊情况比如怀疑变量到了哪个值出现的问题
13、查看所在函数bt也显示进入函数前的函数
指令
查看所在函数bt如图 可以看到显示了当前所在的函数 当进入另外一个函数时能看到当前函数还能看到调用该函数时的函数
14、查看所在行与所在函数f
指令
查看所在行f如图 这个指令可以查看所在第几行搭配 list/l 来查看就能知道上下文 这指令是不注意按出来的不知道不同版本会不会使用不同
总结
以当前指令窗口看使用效率与使用便捷无法与图形化界面比较 图形化界面能看边调试边查看代表指令窗口只能用指令来调试 图形化界面有快捷键指令窗口只有简写指令 如果一个偏复杂的程序图形化界面更好指令窗口没啥优势 加油吧少年