引用:

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

一、基础知识

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. uva 1597 Searching the Web

    The word "search engine" may not be strange to you. Generally speaking, a search engine se ...

  2. 写一个Windows上的守护进程(5)文件系统重定向

    写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有"文件系统/注册表重定向"这么一回事.大致来说就是32位程序在64位的 ...

  3. (原创)ubuntu 12.04 安装 apache ant

    1. go to the websie to download the newest version of ant (search google by "Apache Ant"). ...

  4. Myeclipse中如何修改Tomcat的端口号

    一,使用 Myeclipse 中自带的 tomcat 右键 configure 弹出窗口 在 port Number 中修改 端口号即可: 二,配置的 tomcat 如果用上述的方法,只能打开这样的窗 ...

  5. dropdownlist绑定和选中

    最近在使用dropdownlist控件,对于这个控件,目前我知道的会使用两种方式去绑定数据,现在将这两种方式分享给大家: 现在是后台数据绑定 protected void BindCarID() { ...

  6. 配置chrome支持本地(file协议)ajax请求

    将html代码拖拽进入chrome通过file协议浏览时,发送的ajax请求本地文件,会报跨域错误. XMLHttpRequest cannot load file:///E:/webs/extJS/ ...

  7. [TYVJ] P1030 乳草的入侵

    乳草的入侵 背景 Background USACO OCT09 6TH   描述 Description Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物 ...

  8. wordpress教程之在非single.php页面调用文章的信息

    使用Wordpress的朋友可能遇到这样的问题,在非single.php页面中我们有时候想要调用当前文章的标题.内容等信息,而Wordpress在生成文章页的时候在各个页面中唯一不变的只有当前的文章I ...

  9. ubuntu下编译源码级QT

    注意必须好好看官方文档: http://qt-project.org/doc/qt-5/linux.html 包括编译Qt库依赖的包等等. 编译过程中发现以下错误: All the OpenGL fu ...

  10. C#中List<T>用法

    所属命名空间:System.Collections.Generic public classList<T> :IList<T>,ICollection<T>,IEn ...