通常使用gdb在Linux下调试C/C++程序,编译的时候加上-g选项(gcc -g ......)。下面总结的是我自己经常使用(当然也有一些用的比较少)的gdb命令。

(1)开始及退出

  • 开始:gdb program
  • 退出:quit (简写q)或者Ctrl+d

(2)自动补全:Tab

(3)启动程序

  • run(简写r):运行程序直到遇到断点
  • 与srart的区别:start会在程序的入口函数(通常是main)设置一个临时断点,然后调用run。

(4)断点(breakpoint):简写b

设置断点:

  • break 函数名:在指定函数入口处设置断点
  • break 函数名[or 行号 or 地址] if 条件(就是一个布尔表达式,但是不需要加括号)
  • break 行号:在指定行设置断点
  • break 地址
  • break filename 行号[or 函数名]
  • break,无参的话会在下一条指令处设置断点。

删除断点:(断点号可由info break获得)

  • delete 断点号。(也可以删除断点的集合:delete 2-5)
  • disable 断点号:暂停使用该断点
  • enable 断点号:重新启用该断点
  • clear 行号 or 函数名 :删除指定地点的所有断点(比如clear fun,则删除fun函数中所有的断点)
  • delete breakpoints:删除所有的断点

(5)打印信息

  • print(简写p):后接表达式。常用的比如:变量,函数
  • display 表达式。与print的区别,使用display设置一个表达式后,在以后的每次单步执行后,都会输出所设置表达式的值。

info可以用来查看寄存器、断点等信息。

  • info registers :查看除了浮点寄存器以外的寄存器
  • info all-registers :查看所有寄存器,包括浮点寄存器
  • info registers <regname ...> :查看所指定的寄存器
  • info break:查看所有断点。
  • info threads:查看正在运行程序中的(默认显示所有线程)线程信息

(6)查看源码

  • list(简写l):查看程序源码,默认显示10行
  • list 行号:显示指定以行号为中心的前后共10行代码
  • list 函数名:显示指定函数的源码,也是10行
  • list:接着上一次list命令,继续输出后面的源码
  • list -:同上,但是是往前走。即接着上一次list命令显示的代码,输出前面的源码

(7)跟踪执行

  • step(简写s):单步执行。遇到函数,进入该函数内部。
  • next(简写n):单步执行。遇到函数不会进入该函数内部。
  • until(简写u):运行程序直到退出循环体。
  • until 行号:运行至指定行。
  • finish(简写fin):运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址、返回值、参数值等信息。
  • continue(简写c):继续运行程序直到遇到下一个断点或者程序运行结束。

(8)程序回滚

  • checkpoint
  • restart checkpoint-id:将程序回滚到设置该checkpoint的时刻
  • info checkpoint:查看所有checkpoint,可以获取checkpoint-id

(9)观察点(watchpoint),特殊的断点。

观察点使用watch命令,命令格式与break相同,但它并不是指明断点的位置,而是指明一个表达式,每当该表达式的值改变时,程序便会被暂停。表达式可以是某个变量、由若干变量组成的表达式或者内存地址。

info wachpoints:查看所有观察点。

{捕捉点(catchpoint),也是特殊的断点。使用某种事件的发生作为触发条件。}

GDB 学习的更多相关文章

  1. gdb学习

    gdb学习 [参考资料] http://www.cnblogs.com/jiu0821/p/4483804.html 程序的运行状态有"运行"."暂停".&qu ...

  2. Linux之GDB学习

    Linux之GDB学习 GDB是一款优秀的调试工具,懂的人自然懂,一直以来用它都没有好好整理过使用方法,我用的也是皮毛,目前先整理一下皮毛,日后再更新 使用方法 编译C++ 从编译的角度上来说,需要在 ...

  3. GCC/GDB学习

    GCC学习 1.gcc是根据后缀名来区分文件的 .c : c语言源文件 .a : 目标文件构成的库文件 .C/.cc/.cxx : c++源文件 .h : 头文件 .i : 预处理过的C源文件 .ii ...

  4. GDB学习之道:GDB调试精粹及使用实例

    一:列文件清单  1. List  (gdb) list line1,line2 二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...

  5. gdb学习(一个)[再版]

    概要 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,能够依照用户自己定义的要求随心所欲的执行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式 ...

  6. gdb学习(二)[第二版]

    查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype  ...

  7. gdb学习(一)[第二版]

    概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...

  8. Gdb学习笔记1

    其实,从很早就开始接触gdb程序,gdb调试程序伴我成长,现在对其用法记录以下: 当程序的运行结果和预期结果不一致,或者程序出现运行错误时,gdb就可以派上大用处了.调试的基本过程是:  -> ...

  9. gdb学习-checkpoint,watch

    checkpoint的内容参考: http://blog.chinaunix.net/uid-23629988-id-2943273.html 这一篇主要是checkpoint,在next之前加che ...

随机推荐

  1. java之Map源代码浅析

    Map是键值对.也是经常使用的数据结构. Map接口定义了map的基本行为.包含最核心的get和put操作,此接口的定义的方法见下图: JDK中有不同的的map实现,分别适用于不同的应用场景.如线程安 ...

  2. promise && than

    Promise 构造函数接受一个函数作为参数,该函数的2个参数分别是 resolve 和 reject.他们是2个函数,有 JavaScript 引擎提供,不用自己部署.   var promise ...

  3. P-Called-Party-ID头域

    典型的proxy server在路由 INVITE 请求到目标时插入 P-Called-Party-ID 头域.该头域用 porxy 收到请求的 Request-URI 填写. UAS 从几个已注冊的 ...

  4. 托管C++线程锁实现 c++11线程池

    托管C++线程锁实现   最近由于工作需要,开始写托管C++,由于C++11中的mutex,和future等类,托管C++不让调用(报错),所以自己实现了托管C++的线程锁. 该类可确保当一个线程位于 ...

  5. 异步FIFO的编程

    对于异步FIFO.最基本的两个方面是地址控制和空.满标志位的产生.首先地址控制分别为读地址和写地址,每次读写时能读写地址应该加1.计数次数为ram深度的2倍.当读写地址相等时则空标志位有效,当读写地址 ...

  6. HDU1236 排名 题解

    Problem Description 今天的上机考试尽管有实时的Ranklist,但上面的排名仅仅是依据完毕的题数排序,没有考虑  每题的分值,所以并非最后的排名.给定录取分数线.请你敲代码找出最后 ...

  7. react-color 颜色选择器组件

    demo链接:github demo 安装: npm install react-color --save 有一下几种类型组件 <AlphaPicker /> <BlockPicke ...

  8. Swift-AES之加密解密

    什么是AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代 ...

  9. 【Poj 1330】Nearest Common Ancestors

    http://poj.org/problem?id=1330 题目意思就是T组树求两点LCA. 这个可以离线DFS(Tarjan)-----具体参考 O(Tn) 0ms 还有其他在线O(Tnlogn) ...

  10. [JSOI 2016] 最佳团体

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4753 [算法] 很明显的分数规划 可以用树形动态规划(树形背包)检验答案 时间复杂度 ...