GDB学习笔记(1)

最近通过《软件调试的艺术》学习GDB,书刚读了大概三分之一,这里先记一些笔记
:-)

缩写

short full
b break
i b info break
c continue
r run
at attach
s step
n next
p print
bt backtrace

基本操作

断点

b position
position可以是 filename:line filename:function
filename可以不指明,gdb总有一个焦点文件,刚启动时焦点文件是main函数所在的文件,当程序运行时,焦点文件是当前执行代码所在的文件,也可以通过 list filename:functionname来设定焦点。

断点命令:

command breakPointNumber,对编号为breakPointNumber的断点设置命令,以end结尾,执行到此断点时,命令会执行,比如打印变量:

printf(“at break point 3,
           i = %d,j = %d,k = %d\n”,
           i,j,k) //括号可有可无

一些命令,感觉用处不大。。。

  • define 定义宏,可带最多十个参数  
    
    define PRINT_AND_GO
    xxxxx(说明)
    >printf   $arg1,$arg0
    >continue
    >end
    
-    `show user` :   列出所有宏  
-    `silent` :    不输出信息  
          
## 监视点
wathc `value`  
watch `expession`  
`expression`是 **当前程序语言风格** 的条件表达式,比如 (i>0)&&(j==2)  
当`value`变化或`expression`成立时,程序中断。  
设置监视点时必须保证监视变量在当前程序指针所在位子有效,即对已局部变量,必须保证程序指针停留在局部变量所在函数,所以一般在要函数入口处加一个断点,然后才能设置函数内变量的监视点。  
##条件断点
- 设置条件断点  
   b  `position`  if  (`expression`)  
   `expression`外的括号可有可无  
- 将已有断电设置为条件断点  
   condition `breakPointNumber` if (`expression`)  
   `breakPointNUmber`用 info breakpoint(i b)查看  
   
   
## 继续执行  
-    c/continue 继续执行到下个断点  
-    fin/finsh  继续执行到此函数结束
-    u/until    继续执行到循环结束 
*当然,断点对 `fin/u` 依然有效*
*u 可带位置参数:u `position` * 
-    s/step     执行下一条语句,会进入函数  
-    n/next     执行下一条语句,不会进入函数  
*s/n可带步数参数: s 4*

你可能感兴趣的:(GDB学习笔记(1))