Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188133
  • 博文数量: 74
  • 博客积分: 2521
  • 博客等级: 大尉
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-24 08:28
文章分类

全部博文(74)

文章存档

2012年(3)

2011年(14)

2010年(26)

2009年(31)

分类:

2009-11-29 12:51:23

info

layout


一、

1. 查看源代码:list [函数名][行数]
2. 设置程序运行参数:set args

二、暂停程序
1. continue、next、step

2. 设置断点:
       a、break + [源代码行号][源代码函数名][内存地址]
       b、break ... if condition   ...可以是上述任一参数,condition
    条件。例如在循环体中可以设置break ... if i = 100 来设置循环次数。

       c、delete disable enable
3. 设置观察点:
       a、watch + [变量][表达式]  当变量或表达式值改变时即停住程序。
       b、rwatch + [变量][表达式] 当变量或表达式被读时,停住程序。
       c、awatch + [变量][表达式] 当变量或表达式被读或被写时,停住程序。

4. 设置捕捉点:
       catch + event  当event发生时,停住程序。event可以是下面的内容:
 1)、throw 一个C++抛出的异常。(throw为关键字)
 2)、catch 一个C++捕捉到的异常。(catch为关键字)
 3)、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
 4)、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
 5)、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
 6)、load 或 load 载入共享库(动态链接库)时。(load为关键字,
            目前此功能只在HP-UX下有用)
 7)、unload 或 unload 卸载共享库(动态链接库)时。(unload为关
            键字,目前此功能只在HP-UX下有用)

5. 捉信号:
       handle + [argu] + signals
       signals:是Linux/Unix定义的信号,SIGINT表示中断字符信号,也就是
       Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改
       变信号; SIGKILL表示终止程序运行的信号,等等。
       argu:
   nostop   当被调试的程序收到信号时,GDB不会停住程序的运行,但
                   会打出消息告诉你收到这种信号。
   stop     当被调试的程序收到信号时,GDB会停住你的程序。
   print    当被调试的程序收到信号时,GDB会显示出一条信息。
   noprint  当被调试的程序收到信号时,GDB不会告诉你收到信号的信息。
   pass or noignore    当被调试的程序收到信号时,GDB不处理信号。
                   这表示,GDB会把这个信号交给被调试程序会处理。
  nopass or ignore     当被调试的程序收到信号时,GDB不会让被调
                   试程序来处理这个信号。
6. 线程中断:
        break [linespec] thread [threadno] [if ...]
        linespec 断点设置所在的源代码的行号。如: test.c:12表示文件为
                 test.c中的第12行设置一个断点。
        threadno 线程的ID。是GDB分配的,通过输入info threads来查看正在
                 运行中程序的线程信息。
        if ...   设置中断条件。
三、查看信息  info
     1、查看数据
        print  variable        查看变量
        print  *array@len      查看数组(array是数组指针,len是需要数据长度)
        可以通过添加参数来设置输出格式:
            /x 按十六进制格式显示变量。
            /d 按十进制格式显示变量。
            /u 按十六进制格式显示无符号整型。
            /o 按八进制格式显示变量。
            /t 按二进制格式显示变量。
            /a 按十六进制格式显示变量。
            /c 按字符格式显示变量。
            /f 按浮点数格式显示变量。

      2、查看内存
         examine /n f u + 内存地址(指针变量)
         n 表示显示内存长度
         f 表示输出格式(见上)
         u 表示字节数制定(b 单字节;h 双字节;w 四字节;g 八字节;默认为四字节)
  如:
             x /10cw pFilePath  (pFilePath为一个字符串指针,指针占4字节)
             x 为examine命令的简写。

      3、查看栈信息      
  backtrace [-n][n]
         表示只打印栈顶上n层的栈信息。
        -n 表示只打印栈底上n层的栈信息。
         不加参数,表示打印所有栈信息。

四.变量的检查和赋值 
1.  whatis:识别数组或变量的类型 
2.  ptype:比whatis的功能更强,他可以提供一个结构的定义 
3.  set variable:将值赋予变量 
4.  print 除了显示一个变量的值外,还可以用来赋值

五.函数的调用 
1. call name 调用和执行一个函数
(gdb) call gen_and_sork( 1234,1,0 )
(gdb) call printf(“abcd”)
$1=4 
2. finish 结束执行当前函数,显示其返回值(如果有的话)

六、机器语言工具
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:
l. $pc : 程序计数器 
2. $fp : 帧指针(当前堆栈帧) 
3. $sp : 栈指针 
4. $ps : 处理器状态

七. 原文件的搜索
search text:该命令可显示在当前文件中包含text串的下一行。
Reverse-search text:该命令可以显示包含text 的前一行。

八、基本gdb命令:
---------------------------------------------------------------------
命令          简写         功能
---------------------------------------------------------------------
file                             装入想要调试的可执行文件.
kill                         终止正在调试的程序.
list                          列出产生执行文件的源代码的一部分.
next                       执行一行源代码但不进入函数内部.
step                      执行一行源代码而且进入函数内部.
continue               继续执行程序,直至下一中断或者程序结束。
run                         执行当前被调试的程序.
quit                        终止 gdb.
watch                        使你能监视一个变量的值而不管它何时被改变.
catch                         设置捕捉点.
thread                    查看当前运行程序的线程信息.
break                    在代码里设置断点, 这将使程序执行到这里时被挂起.
make                        使你能不退出 gdb 就可以重新产生可执行文件.
shell                         使你能不离开 gdb 就执行 UNIX shell 命令.
print                      打印数据内容。
examine               打印内存内容。
backtrace bt             查看函数调用栈的所有信息。
backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)
breakpoint 在程序中设置一个断点
cd 改变当前工作目录
clear 删除刚才停止处的断点
commands 命中断点时,列出将要执行的命令
continue 从断点开始继续执行
delete 删除一个断点或监测点;也可与其他命令一起使用
display 程序停止时显示变量和表达时
down 下移栈帧,使得另一个函数成为当前函数
frame 选择下一条continue命令的帧
info 显示与该程序有关的各种信息
jump 在源程序中的另一点开始运行
kill 异常终止在gdb 控制下运行的程序
list 列出相应于正在执行的程序的原文件内容
next 执行下一个源程序行,从而执行其整体中的一个函数
print 显示变量或表达式的值
pwd 显示当前工作目录
pype 显示一个数据结构(如一个结构或C++类)的内容
quit 退出gdb
reverse-search 在源文件中反向搜索正规表达式
run 执行该程序
search 在源文件中搜索正规表达式
set variable 给变量赋值
signal 将一个信号发送到正在运行的进程
step 执行下一个源程序行,必要时进入下一个函数
undisplay display命令的反命令,不要显示表达式
until 结束当前循环
up 上移栈帧,使另一函数成为当前函数
watch 在程序中设置一个监测点(即数据断点)
whatis 显示变量或函数类型

阅读(960) | 评论(0) | 转发(0) |
0

上一篇:C/C++编程相关

下一篇:gprof使用【转】

给主人留下些什么吧!~~