linuxgdb与shell命令.ppt
《linuxgdb与shell命令.ppt》由会员分享,可在线阅读,更多相关《linuxgdb与shell命令.ppt(63页珍藏版)》请在三一办公上搜索。
1、目录,Gdb调试基础知识Gdb调试技巧Shell脚本的基本知识,GDB调试基础知识,本章主要介绍gdb调试基础知识,通过介绍这些基础知识能够掌握gdb调试。本章主要内容如下:GDB介绍 GDB调试方法 GDB调试命令,GDB介绍,GDB是GNU开源组织发布的一个强大的程序调试工具。gdb-GNU debuggergdb官方网址-http:/www.gnu.org/software/gdb/gdb.html gdb下载地址-http:/ftp.gnu.org/gnu/gdb/,GDB调试方法,常用的gdb调试方法有两种调试一个新进程调试一个正在运行的进程,调试一个新进程,调试一个新进程为将一个编
2、译好的程序以gdb方式运行起来。在以gdb方式运行前先确定此程序是否可以进行gdb。程序都是由.c文件通过编译连接生成的。在编译.c时如果没有添加-g编译选项则不能进行gdb调试。例如有一个test.c文件,编译连接时执行 gcc test.c o test则编译出的test程序不能进行gdb调试。执行gcc g test.c o test编译出的程序test可以进行gdb调试,调试一个新进程,确认程序可以进行gdb调试后,gdb调试一个新的进程方式如下所示 gdb 程序名称 例如gdb test程序 gdb test,调试一个正在运行的进程,调试一个正在运行的进程为如果程序已经运行,在运行时
3、通过log,黑匣子或其他功能发现正在运行的程序出现问题,此时可以通过gdb调试正在运行的程序。调试正在运行程序的步骤如下所示 查找正在运行的进程号(pid)执行命令 gdb p 进程号查找正在运行程序的进程号的方式很多。一般使用ps-ef命令。,GDB调试命令,Gdb调试命令是进行gdb调试时使用的命令。下面将对每个命令进行说明。break,watchdelete,disable,enablecontinue,step,next,finishthread,info threadbacktrace,framelistprintxcallrun,break,watch,break(简写为:b)命令
4、来设置断点有几种设置断点的方法:break 函数名 break 文件名file:行号line break 行号line break if 条件 info break,break,watch,break 函数名 是在一个函数上设置断点,如果程序运行到此函数则程序停止break 文件名file:行号line 是在文件名为file文件的line行上设置断点。break 行号 line 是在当前文件的line行上设置断点,break,watch,break if 条件 是设置条件断点,程序运行时满足if后的条件,运行到断点处才停止。info break 是查看本程序中设置断点,break,watch,
5、watch命令设置观察点。与watch相关的命令如下所示 watch rwatch awatch info watchpoints,break,watch,watch 全局变量名称如果全局变量值发生变化则程序在全局变量发生变化位置停止 rwatch 全局变量名称 如果全局变量被读取则程序在全局变量被读取的位置停止 awatch全局变量名称 如果全局变量被读取或修改则程序在全局变量被读或写的位置停止。上面命令的全局变量如果是指针,上面的命令可能不起作用。,break,watch,info watchpoints查看设置的watch点。info break同时显示break断点与watch断点。故
6、可以用info break来查看,delete、disable、enable,delete(简写:d)、disable(简写:dis)、enable(简写:ena)为维护断点的命令delete 断点号i 断点号j 为删除断点号为i,j,的断点。如果delete后没有参数则删除所有断点。断点号:设置的第几个断点。可以通过info break命令查看,delete、disable、enable,disable断点号i 断点号j 使断点号i,j,.的断点无效即断点号为i,j,的断点未删除但已经不生效enable 断点号i 断点号j 使断点号i,j,的断点有效 disable使断点暂时不使用,并没有删
7、除如果想继续使用只要enable即可。,continue,step,next,finish,continue(简写:c),step(简写:s),next(简写:n),finish(简写:fin)实现恢复程序运行和单步调试功能。continue 运行到下一个断点step进行函数内部next单步执行,continue,step,next,finish,finish 跳出函数,thread,info thread,thread,info thread为操作线程的命令 thread 线程序号i 切换到线程序号为i的线程 info thread 查看当前程序中的所有线程 这两个命令通常一起使用,一般先通
8、过命令info thread查找到线程的序号再切换线程。使用info thread命令后显示的结果的第一列为线程的序号,backtrace,frame,backtrace(简写:bt),frame(简写:f)为调试堆栈的命令backtrace 打印当前的函数调用栈的所有信息frame 栈层i切换到第i层栈在frame命令前一般先调用backtrace命令,frame 栈层i就是切换到通过backtrace命令查看到的栈层i。,list,list为显示源代码命令。一般有如下几种使用方法listlist-list 函数名functionlist 文件名file:行号numlist 行号num,li
9、st,List 显示当前行后面的源程序。list-显示当前行前面的源程序。list 函数名function显示函数名为function的函数的源程序。list 文件名file:行号num显示文件名为file行号为num的源程序。list 行号num显示当前文件行号为num的源程序。,list,使用list命令时需要将程序的源代码与可执行程序放到同一磁盘上且源代码与编译程序时的目录结构相同。否则执行list命令没有结果显示。在测试线上代码与程序不在同一磁盘上,执行list命令没有结果显示。,print,print(简写:p)为查看当前程序的运行数据。通常命令使用格式有两种print 变量名称pr
10、int/格式 变量名称,print,print 变量名称 查看变量值print/格式 变量名称 以某种格式显示变量名称。格式种类如下所示:,print,x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十六进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。c 按字符格式显示变量。f 按浮点数格式显示变量。,print,例如以16进制显示变量iprint/x I 程序默认以10进制显示,x,x(小写)为查看内存命令x/内存的长度/显示格式/请求的字节数内存的长度:表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容显示格式:
11、显示的格式如以16进制显示则填x请求的字节数:表示gdb每次从内存中读取字节的单位。可以是如下几个值:,x,b表示单字节h表示双字节w表示四字节g表示八字节如果不填写则默认按照四字节显示,call,call为强制调用函数命令call 函数名function 强制调用函数名为function的函数。如果函数function带参数在参数必须填写否则函数调用失败。如调用printf函数进行打印hellocall printf(“hello”)不能这样调用 call printf“hello”,run,run(简写为r)为程序启动运行命令。有两种使用格式runrun 启动参数,run,run 在gdb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linuxgdb shell 命令
链接地址:https://www.31ppt.com/p-5380519.html