linux gcc及gdb常用功能学习总结

  gcc常用选项 

-c

只编译和汇编不连接

编译成目标代码.o文件

-s

只编译,不汇编和链接

编译成汇编文件以.s为扩展名

-v

显示gcc版本

 

-g

添加调试标识

 

-ggdb(n)

是用gdb扩展产生调试符号

n值为1至3,表示级别,其中3为最高级

-Wall

显示所有的警告

 

O(n)

对编译的代码进行优化

n为优化基别,值为1至3,3为最高级别

 

gdb常用选项

Ø  step(s)和 next(n)单步调试命令

说明:step进入函数内部,next不进入函数内部

Ø  print 和display 显示命令

print 表达式特点:

1)         print $编号 打印从1开始的第“编号”个print命令

2)         print $$编号 打印cong当前编号倒着数的编号+1个print命令,即:

(当前编号-编号+1)的print命令

3)         对变量进行赋值 print 变量=表达式

4)         打印内存某个部分开始的一块连续空间的内容 print 开始表达式(地址)@要打印的连续空间的大小

5)         按格式显示变量 print或 display  /格式控制符 变量

display和print的区别:

在使用display命令时,每次调试器中断程序、挂起指令时都要显示变量的值。可以使用undisplay  <dnums …> dnums为设置好的自动显示的编号 可用-表示一个范围,或用分割自动编号,来一次删除多个

 

注意:

显示命令中,如果局部变量和全局变量重名,那么显示的是局部变量,如果要显示全局变量,则应该使用:file::variable

输出格式:

x  十六进制格式显示变量;                                   d十进制格式显示变量;

u十进制无符号格式显示变量;                             o八进制格式显示变量;

t二进制格式显示变量;                                            c字符格式显示变量;

f浮点格式显示变量

 

Ø  set命令

set 用来改变变量的值 set 变量=值

Ø  break 设置断点命令以及相关命令

continue命令

continue 使程序在信号发生后或是停在断点之后继续运行,可以带一个参数n,表示程序在运行过程中将忽略断点的次数为n,也就是在第n+1次运行到断点时,才暂停程序的执行

condition命令

condition 当条件表达式为真时,“断点编号” 处会暂停程序的执行;

condition  断点编号 条件

tbreak 设置临时断点命令

说明:当该断点只要一执行,该断点将会自动删除;

disable 断点编号

说明:使所设置的断点失效

enable 断点编号

说明:恢复暂时失效的断点

delete 断点编号或者表达式

说明:清除指定断点

clear 要清除断点所在的行号

说明:清除指定断点,使用该方式,gdb会给出提示,而delete不会给出提示

 

Ø  watch 设置观察窗口

可以设置任何需要查看的表达式,但是要注意到是由于观察窗口不是一段特定的代码,因此可以在程序运行的任何时间对其求值,可是如果在表达中的某个变量取值超出返回,将不能再对表达式取值了

Ø  查看栈信息相关命令

backtrace 或 bt  查看栈信息,但要注意输出和调用正好相反;

backtrace  n(-n) 或 bt 查看栈顶上n层(栈底下n层)信息;

切换当前栈: frame n 或f n 其中n为从0开始的整数,是栈中的层编号,0表示栈顶。

up n 和down n:up表示向栈底方向移动n层,down表示向栈顶方向移动n层

查看当前栈: frame或f

显示详细当前栈信息:info frame或info f

显示当前函数的参数名及值: info args

显示当前函数所有局部变量的名及值:info locals

显示当前函数中的异常处理信息:info catch

Ø  显示源代码list命令

参数:<linenum>或<function> 或<first>,<last>或, <last>或<+offset>或<-offset>

<filename:function>

<*address>:程序运行时的语句在内存中的地址

Ø  info line命令

说明:查看源代码在内存中的地址,后面可跟:行号,函数名,文件名:行号,文件名:函数

 

Ø  产生信号量: signal  <signal(1-15)>

Ø  强制函数返回: return  <expression>

说明:如果指定了expression,则该表达式的值将作为返回值返回。

Ø  强制调用函数:call  <expr>

说明:expr代表函数名,将显示返回值,如果返回值为void,则不显示;

 

Ø  分析core文件

步骤:

1.         使用 gdb –ggdb3 文件名.c  –o 文件名

2.         使用ulimit –c unlimited 获得权限

3.         使用gdb文件名 core.****

你可能感兴趣的:(linux,function,汇编,gcc,delete,Signal)