gdb 调试使用

来源:互联网 发布:mac rmvb转换 编辑:程序博客网 时间:2024/06/05 19:55

1.gdb programe

不带参数,调试可执行文件programe

  gdb programe core

带一个执行文件+一个核心文件

  gdb programe 1234 

带一个可执行文件+PID   (除非你的核心文件名是‘1234’,因为GDB先检测核心文件)

 

2.gdb  命令

2.1 b|break  [file:] function

在某个文件里的函数加上断点

2.2 r|run [arglist参数列表]

 运行

2.3 bt|backtrace  打印程序的栈 

为堆栈提供向后追踪功能

 

2.4 print expr   打印表达式的值

print p 

print function 

whatis p 类型

2.5 c 继续执行 continuestop结束之后或者断点之后

2.6 n 单步执行或者在结束之后继续执行下一行

2.7 edit  [file:]function 查看程序行数在哪里结束的!

 

2.8 list [file:] function 打印停止处的程序代码 vicinity 附近的

 

2.9  s|step  执行停止后的下一个程序行;单步执行下一行

 

2.10 help [gdb command name]   命令帮助

 

2.11 q|quit

 

 

 

 

3.断点处理

3.1

info b 查看断点列表

 

Num     Type           Disp Enb Address            What

3       breakpoint     keep y   0x00000000004005bc in test2 at gdb_test.c:6

breakpoint already hit 1 time

6       breakpoint     keep y   0x0000000000400612 in test at gdb_test.c:12

7       breakpoint     keep y   0x0000000000400629 in test at gdb_test.c:13

 

Num 断点号   type 断点  disp ? Enb  允许y/禁止n   Address 地址  What 范围行号等信息

3.2 创建断点

b  pos   (pos可以是函数,可以是行号,确定范围

3.3 删除断点

delete  breakpoint num  (删除断点num,如果不加num全部删除)

clear line  (删除line行的所有断点)

3.4 禁止/允许断点   

enable/disable breakpoint  num

 

4.信号

gdb通常可以捕捉信号,通过捕捉信号,它可决定正在运行的进程要做些什么工作

handle命令可控制信号的处理,它有两个参数,先是信号名(可以是名字或者是信号编号kill -l 查看之后是接受到信号需要做些什么

参数 有

nostop/stop停止执行与否

noprint/print打印信息

nopass/pass  将信号传递给进程与否,传递的话允许进程对其进行处理

eg:

handle SIGINT stop noprint

5.搜索文件

search test   搜索含有‘test’的行  向后搜索

reverse-search test  搜索。。。  向前搜索

 

输出该行行号以及内容

 

6.shell 回到shell  CTRL+D 回去gdb

 

7.命令的历史

set history expansion on 允许使用历史命令

相反的  off

 

8.kill 结束正在被调试的程序

9.查看info

info prog  查看执行文件运行状态

info var   查看变量

info files 显示被调试文件的详细信息

info local 显示当前函数中的局部变量信息

info func  显示所有函数信息

list 显示代码段

 

10.单步运行

next  在不单步执行其他函数的情况下,向前执行一行源代码

step  进入的单步执行

进入某个函数想要退出,可以使用kill/finish命令

 

 

11.其他命令

 

pwd 当前工作目录

cd 

display 程序停止时显示变量和表达式

undisplay  相反

 

down下移栈帧,使得另一函数成为当前函数

up 上移栈帧 ,使另一函数成为当前函数

 

frame 选择下一条continue命令的帧

jump 在源程序另一点开始执行

pype显示一个数据结构的内容 如一个结构或者c++

set variable 设置变量赋值!!

signal 发送信号到当前运行的进程

 

watch 在程序中设置一个监测点

 

whatis 显示变量或类型

 

 

 

12.gdb 直接运行

 

help 出现命令分类

 

 

13.print  命令的使用

 

 

14.set 命令

set variable  变量=

15.watch 命令

以条件表达式设置断点

b 7 if i==10

还有一种以表达式设置断点的方法

watch i==99  i变量被定义的后一行设置中断,程序暂停后可以使用命令设置断点了

 

 

实例

查看错误的行号  where

list查看错误处附近的代码


0 0