gdb是一个很有用的调试工具,自己做linux下的开发,天天用的说。下面说一下自己平常实际操作。

   1,gdb 可执行程序,进入调试。

   2,r 运行程序。若带参数,则r 参数一 参数二 。

   3,既然调试,必有断点。break命令(可以简写为b)。

   break line-number 使程序恰好在执行给定行之前停止。
   break function-name 使程序恰好在进入指定的函数之前停止。
   break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。

     break routine-name 在指定例程的入口处设置。

   4,continue ,继续运行程序,直到断点等。

   5,list 列出当前运行程序原始文件内容。

   6,until 某一行,跟踪某一个接口时,运行到该接口的某一行。list配合使用。

   7,next 单步执行程序。这个是以行为单位,这行如果调用其它函数,一会一行就过去。若想看到,这个函数内部执行过程,则用step命令,跟进。

   8,info b查看已设置断点。delete(简写d)删除断点。断点都有序号num。d 1就是删除第一断点。若不带序号,则全部删除。 若想暂时不适用某个断点。disable num。继续使用enable num。 运行到某个断点时,想要删除该断点,也可以用clear 直接清除。

   9,print(简写p)用于打印数据。p sizeof(struct xxx),p i。p 后面加上你想看的东西。

   10,shell命令,linux 下回到终端,进行一些操作,然后exit继续回到gdb。

   11,call func。这个很实用,直接调用某一接口,可以直接调试该接口,也可以查看或取得该接口的返回值,很有用。

   12,watch 命令,用于跟踪某一变量数值变化。当我们实在不知道一个数据被在哪里改变的时候,用这个。

   14,bt,where两个命令用于查看栈的调用情况。bt full可以看到详细信息。

   13,多线程技巧:info threads,查看运行的线程,每个线程都会有一个编号,如有lock状态,则是死锁。若要切换到对应线程,则用thread num。set schedulre-locking on/off 用于控制其它线程是继续运行,还是暂停。我们有时候要同时跟踪几个线程的时候,就要先 设置为on,完这个线程,设置为off,在让其它线程运行,从而继续跟踪其它线程。避免多线程下,无法单一跟踪一线程。

   14,多进程技巧:必有fork命令。我们如果要跟踪子进程,就 set follow-fork-mode child。若要跟踪父进程,则set follow-fork-mode parent。

   15,预期调试技巧,比如程序运行到某个地方,条件不符,但我们又想按照条件符合的情况运行,这时候可以用set命令,比如 a=1时往左,但这个时候a却为零,我们可以set a=1。

   *********************************************************************************

   

   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 显示变量或函数类型