引用:

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

一、基础知识

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. CppCon - Modern Template Metaprogramming 杂记

    2014年底才看到github和channel9上有CppCon2014的视频和资料,顿时激动不已.最近小生也一直在研习CppCon2014中令人兴奋的内容.这篇鄙文就是小生学习了<Modern ...

  2. (转) Name visibility

    Scopes Named entities, such as variables, functions, and compound types need to be declared before b ...

  3. [poj2762] Going from u to v or from v to u?(Kosaraju缩点+拓排)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud     Going from u to v or from v to u? Tim ...

  4. TCP/IP 3次握手

    参看下面链接:http://blog.chinaunix.net/uid-20665047-id-3137792.html

  5. maven配置spring mvc+hibernate+spring框架

    作为一名刚出茅草屋的新手小白写的框架,仅适合新手小白借鉴,大神勿喷,谢谢...... 前天刚知道spring mvc这个框架现在也很流行,决定用它代替struts2来写我的毕业设计. ...作为一名新 ...

  6. Android实现点击事件的4种方式

    一.通过在activity_main.xml中,按钮button控件中添加onclick事件实现 在   activity_main.xml 对应的按钮Button中加入下面红色事件 <Butt ...

  7. 写入和读取LOB类型的对象

    ====写入数据============ create or replace procedure addWaterFallis directions clob; amount binary_integ ...

  8. javascript 实现禁止右键,复制,选取文本 (兼容firefox,IE,chrome等主流浏览器)

    1. JS 禁止右键 <script type="text/javascript">document.oncontextmenu=function(e){return ...

  9. [原]此程序专用来说明C++模板的用法

    #include using namespace std; //此程序专用来说明模版的使用 template void swap1(T& a,T& b){     T temp=a; ...

  10. Django学习(五) 定义视图以及页面模板

    请求解析一般都是通过请求的request获取一定参数,然后根据参数做一定业务逻辑判断,这其中可能包括查询数据库,然后将需要返回的数据封装成一个HttpResponse返回. 代码如下: 这是一个简单的 ...