引用:

记录学习心得。未来将统一整理。

一、基础知识

1:细节整理。

  1,启动GDB的前置要求。

    1)使用gcc/g++时,添加-g的指令。例如:g++ -g test.cpp -o test

    2)如没有添加编译信息,可以运行程序,后使用源代码关联。(不确定此方式的具体操作方法)

  2,GDB中可以使用shell

    1)例:shell make <make-args> // rebuild source code.

    2)可以忽略shell前置:make <make-args> // rebuild source code.

  3,自动补全和查找功能。

    1)b 'buffer( M-? 可以用来搜索buffer函数的位置。

    2)可以使用TAB键进行自动补全。

  4,调试已运行程序。

    1)查找到进程ID,使用ID来调试

    2)使用gdb <program>来链接源代码,然后attach来链接到进程。

  5,暂停和继续。

    1)断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(single),线程停止(thread stop)。

    2)继续(continue)

  6,if判断:break/watch支持if判断。catch不支持。

  7,GDB中可以查看三种变量值:

    1)全局变量。

    2)静态全局变量。

    3)局部变量。

基本命令:

 启动GDB
  gdb <program>
  gdb <program> core // add a core file.。
  gdb <program> <PID> // if it is a server process. gdb will attach it automitically.
运行参数。
  set args // 指定运行时参数。
  show args // 显示运行参数。
运行环境
  path <dir> // 设置程序运行路径
  show path
  set environment varname [=value] // 设置环境变量,set env USER=zheng
  show environment [varname]
工作目录
  cd <dir> // 和shell指令一致。
  pwd
设置程序的输入输出。
  info terminal
  tty <file>/<dev>
断点方式:break
  ~ <function> // 查看函数
  ~ <+/- offset> // 从当前行偏移多少行。
  ~ <filename:linenum> // 源文件 多少行。
  ~ <filename:function> // 源文件:函数
  ~ <*address> // 内存地址处停止。
  info ~[n] // 查看第N个断点
观察点:watch
  watch <expr> // 表达式发生变化时停止。
  rwatch <expr> // 表达式被读时停止。
  awatch <expr> // 表达式被读/写时停止。
  info watchpoints // 列出当前所设置的所有观察点。
捕捉点:catch
  catch <event>
  // 1 参数event:throw抛出,catch捕捉,exec调用,fork,vfork,un/load 共享库。
清除停止点:clear。
  ~
  ~ <function>
  ~ <linenum>
  ~ <filename:linenum>
  ~ <filename:function>
  delete [breakpoint][range] // range: 例[2-5][1-3]
  disable/enable // 使能和失能 停止点。
自动化调试的一个例子(包括if)
  break foo if x>
  commands
  printf "x is %d\n", x
  continue
  end
信号处理
  handle <single><keywords>
  no/stop
  no/print
  no/pass
  no/ignore
  info singles
  info handle
线程断点
  break <linespec> thread <threadno> // break的其他方式也可以使用。
查看栈。
  backtrace(bt)
  bt [n] // 打印n层信息
  bt [-n] // 打印底下n层信息
  frame(f) [n] // 查看第N层
  up/down [n] // 向 上/下 移动 N层。默认为1
  info frame // 打印更详细的信息。
显示源代码
  list <first>,<last>/<> // 以参数确定显示位置。break可以使用的参数,list都可以使用
  set listsize <count> // 设置显示行数。
  show listsize
搜索(正则表达式)
  forward-search <regex>
  search <regex>
  reverse-search <regex>
指定源文件路径。
  directory(dir) <dirname>
  shwo dir
自动显示功能
  display <expr>
  display/<fmt> <expr>/<addr>
  undisplay ...
  delete display ...
GDB环境变量
  set $foo = *obj_ptr
  show convenience
  例:
  set $i = ;
  print array[$i++]->content
修改程序中的变量:
  print x= // X时C/C++中变量
调转,强制调用函数和强制返回。
  jump <linespec>/<address>
  call <expr>
  return <expr>/<>

三、

gdb零散学习心得。的更多相关文章

  1. Linux下程序的机器级表示学习心得

    Linux下程序的机器级表示学习心得 上周学习完Linux程序的机器级表示后,对于其中有些还是掌握的不太透彻.对于老师提出的关于本章一些细节的问题还是有不会,所以又重新温习了一下上周的学习内容,以下为 ...

  2. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  7. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

随机推荐

  1. 0122——UITabBarController

    UITabBarController是IOS中很常用的一个viewController.UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的c ...

  2. 解决iOS9苹果将原http协议改成了https协议问题

    解决方法: 在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllo ...

  3. Spark配置&启动脚本分析

    本文档基于Spark2.0,对spark启动脚本进行分析. date:2016/8/3 author:wangxl Spark配置&启动脚本分析 我们主要关注3类文件,配置文件,启动脚本文件以 ...

  4. 【solr专题之一】Solr快速入门

    一.Solr学习相关资料 1.官方材料 (1)快速入门:http://lucene.apache.org/solr/4_9_0/tutorial.html,以自带的example项目快速介绍发Solr ...

  5. CI框架微信开发-自定义菜单

    在CI框架下面实现了自定义菜单功能.写了一个model,一个类库.顺便附带access_token的实现方式 <?php class Makemenu{ public $menustr; pub ...

  6. DLL技术应用03 - 零基础入门学习Delphi46

    DLL技术应用03 让编程改变世界 Change the world by program DLL的加载和调用 [caption id="attachment_2685" alig ...

  7. 原创:应用串行NOR闪存提升内存处理能力

    在嵌入式系统中,NOR闪存一直以来仍然是较受青睐的非易失性内存,NOR器件的低延时特性可以接受代码执行和数据存储在一个单一的产品.虽然NAND记忆体已成为许多高密度应用的首选解决方案,但NOR仍然是低 ...

  8. WPF笔记(1.8 资源与映射)——Hello,WPF!

    原文:WPF笔记(1.8 资源与映射)--Hello,WPF! 终于,看明白了,已经是凌晨1:39分.这本书这一节写得实在是不好,一个local搞得我糊里糊涂,于是,准备按照他的思路,按照我的理解,改 ...

  9. nginx+vaadin配置

    nginx+Vaadin的特殊性在于配置WEBSOCKET或LONG_POLLING.网上资料不多,自己多次尝试配置都不成功,后来终于找到这篇说明才得以配置成功,使用效果不错,介绍如下. 1./etc ...

  10. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...