gdb命令详解

来源:互联网 发布:ps美工视频教程 编辑:程序博客网 时间:2024/05/16 10:43

1.列出文件清单

    (gdb) listline1,line2

2.执行程序

    使用gdb执行调试程序,默认使用run命令带上一条命令参数,若需要修改参数可使用set args,show args可查看其缺省参数列表。    (gdb) run

3.显示数据

(gdb) print p   (p为变量名)(gdb) whatis p   //显示命令类型(gdb) print function_name() //对程序中函数调用(gdb) print 

4.打断点

break可简写为b(gdb) b line_number(gdb) b function_name(gdb) b routine_name(gdb) b filename:line_number(gdb) b filename:function_name(gdb) b line-or-function if expr  //给出条件设置断点

5.管理断点
1)显示断点信息

(gdb)info break

2)删除指定断点

(gdb) delete breakpoint 1   //1为断点编号,若缺省则删除所有断点

3)禁止使用断点

(gdb)disable breakpoint 1

4)允许使用断点

(gdb)enable breakpoint 1

5)清楚某一代码中所有断点

(gdb) clean number

6.变量的检查和赋值

 (gdb)whatis: 识别数组或变量的类型       (gdb)ptype: 比whatis的功能更强,他可以提供一个结构的定义      (gdb)set variable: 将值赋予变量       (gdb)print: 除了显示一个变量的值外,还可以用来赋值

7.单步执行

(gdb)next   不进入的单步执行        (gdb)step   进入的单步执行         (gdb)finish  如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish 

8.函数的调用

(gdb)call   name   调用和执行一个函数           

9. UNIX接口

 (gdb)shell   命令可启动UNIX外壳,CTRL-D退出外壳,返回到 gdb.  

10.gdb多线程

(gdb)info threads  //显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。  前面有*的是当前调试的线程。  (gdb) thread ID  //切换当前调试的线程为指定ID的线程。  (gdb)break thread_test.c:123 thread all //在所有线程中相应的行上设置断点 (gdb)thread apply ID1 ID2 command  //让一个或者多个线程执行GDB命令command。  (gdb) thread apply all command  //让所有被调试线程执行GDB命令command。(gdb)set scheduler-locking off|on|step //off 不锁定任何线程,也就是所有线程都执行,这是默认值。  on 只有当前被调试程序会执行。  step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
原创粉丝点击