首页 > 编程知识 正文

linux命令(linux vim编辑)

时间:2023-05-04 15:30:42 阅读:68506 作者:35

简单说一下GDB在LINUX上的使用方法。 请告诉我。 各位,请拔出剑来。1.什么是GDB,能干啥?

gdb是GNU开源组织发表的强大的Linux上的程序调试工具。

一般来说,GDB主要有助于实现以下四个功能:

1、可以启动你的程序,按照你定制的要求随心所欲地运行程序。

2 .可以使调试后的程序在指定的调试点停止。 (断点可以是条件表达式。)

3、程序停止的时候,可以检查这个时候在你的程序里发生的事情。

4、可以修改程序,纠正一个错误的影响,测试其他错误。

【来自百度百科】2.GDB调试的对象

GDB主要调试用C/C语言编写的程序。 当然,也可以调试其他语言的程序。 这里只说抄送(其他语言也不会哦) )。

GDB调试必须是可执行文件,而不是. c文件

要使用gcc进行编译,具体命令如下:

gcc -g源文件. c -o输出中的目标文件

-g、-o参数是必不可少的

http://www.Sina.com/http://www.Sina.com /

(gdb ) help :查看命令帮助,具体命令查询在gdb中输入help命令,省略h

(gdb ) run )加载恢复运行文件(run-text )文本文件,加载run-帅母鸡(二进制文件),缩写为r

(gdb ) start )单步执行,运行程序,在第一个执行语句中停止

(gdb ) list )查看原始代码(list-n,从第n行查看代码。 list函数名称:查看具体函数)

(gdb ) set :设定变量值

(gdb ) next )单步调试(每个过程直接执行函数),缩写为n

(gdb ) step )单步调试(逐句)跳进自定义函数内部执行),缩写为s

查看(gdb ) backtrace )函数调用的堆栈帧和层次关系,缩写为bt

切换(gdb )帧)函数堆栈帧,缩写为f

观察(gdb ) info )函数内部的局部变量的值,简称为I

(gdb ) finish )退出当前函数并返回函数调用点

(gdb ) continue )继续运行,简称c

(gdb )打印)打印值和地址,简称p

(gdb ) quit )退出gdb,缩写为q

(gdb ) break num :在第num行设置断点,省略b

(gdb ) info breakpoints :查看当前设置的所有断点

(gdb ) delete breakpoints num )删除第num个断点,缩写为d

(gdb ) display )跟踪和查看特定变量的值

(gdb ) undisplay )取消跟踪观察变量

(gdb ) watch :当设置了视点的变量改变时,打印显示

(gdb ) i watch :显示观察点

(gdb )启用断点:启用断点

(gdb )禁用断点:禁用断点

(gdb ) x )查看内存x/20xw,20个单元、十六进制、4字节、每单元

(gdb ) runargv(1) argv)调试时的命令行参数

以上是GDB命令的一部分,在以下列中详细说明了基本上常用的命令。

* *列表* *

list可以写为l,并列出调试的程序的代码

1 .列表行编号

可以列出linenumber附近的代码

2 .列表函数

可以列出函数上下文的源程序

runquit如何在GDB上运行程序? 此时,只需输入run命令即可执行命令

quit是GDB调试3.GDB常用的调试命令

在gdb调试期间使用break命令设置断点的方法包括

break function在进入指定的函数function时停止执行。 在c中,可以使用class:function或function(type,type )格式指定函数名称

break lineNumber会在指定的代码行中断点

break offset/break -offset是当前行之前或之后offset行的断点,offset是自然数

break filename :行编号是名为filename的文件的行编号行中的断点

break filename:function会在名为filename的文件中的function函数入口中断点

break *address使用程序正在运行的内存地址中断点

break通过以下命令停止

止运行

break … if < condition>

在处理某些循环体中可使用此方法进行调试,其中…可以是上述的break lineNumber、

break +offset/break -offset中的参数,其中condition表示条件,在条件成立时程
序即停止运行,如设置break if i=100表示当i为100时程序停止运行。

查看断点时,也可以使用info命令如info breakpoints [n]、info break [n]其中n 表示断点号来查看断点信息。

可以通过delete命令删除所有的断点
next
使用next命令单步执行程序代码,next的单步不会进入函数的内部,与next对应的step命令则在单步执行一个函数时进入函数内部,类似于VC++中的step into.
其用法如下

next <count>

单步跟踪,如果有函数调用不会进入函数,如果后面不加count表示一条一条的执行,加count表示执行后面的count条指令

continue

当程序遇到断点停下来之后,可以执行continue继续执行到下一个断点或到程序结束

printprint可以缩写为p,可以通过print命令查看参数或程序运行数据

值得注意的是print输出可以指定输出格式:

x按16进制格式显示变量d按十进制显示变量u按十六进制格式显示无符号整形o按八进制格式显示变量t按二进制格式显示变量c按字符格式显示变量f按浮点数格式显示变量

GDB查看,执行汇编语言
查看汇编 disassemble

下面就是查看的汇编代码

那么我如果要是在红箭头出进行下断如何下?


还有这种随源码一起排列的,是不是很直观:

再补充几条命令
backtrace(直译回溯)(bt)

欢喜的鞋垫的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用这条命令来查看当前的栈中的所有信息。人为的将程序下断停住,直接上图:

bt n

显示栈顶的几个层的信息

bt -n

显示栈底下的几层信息

but,如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换当前栈。(就有了下面这条命令)

frame(帧)(f)f

n是一个从0开始的整数,是栈中的层编号。比如:frame 0,表示栈顶,frame 1,表示栈的第二层。

up

表示向栈的上面移动n层,可以不打n,表示向上移动一层。

down

表示向栈的下面移动n层,可以不打n,表示向下移动一层。

info f

会打印出更为详细的当前栈层的信息,只不过,大多数都是运行时的内内
地址

(以下讲解没有截图,为避免审美疲劳,请适度观看)

**print**(p)

 可以输出东西可多,全局变量,静态全局变量,局部变量,

 如果你的局部变量和全局变量发生冲突(也就是重名),一般情况下是局部变量会隐藏全局变量。
查看全局变量,利用::,例如在1.c中看x

gdb)p "1.c"::x

数组(动)

p *array@len

array:数组的首地址,len:数据的长度
(gdb) p *array@len
$1 = {1, 2, 3, 4, 5}
(静)
直接p数组名

所有寄存器的值

info registers

查看指定的寄存器的值

p $eip

结构体
如果你想很漂亮的输出结构体请设置

set print pretty on

打开print pretty这个东西,没错,输出很漂亮滴,

总而言之,p很强大,只要你想输出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。