引用:

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

一、基础知识

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. 【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)

    ========================================================================================== 最近一直在看Dee ...

  2. jquery file upload 后台收到的文件名中文乱码, filename中文乱码

    在jQuery File Upload.js文件里,在以下这个js中有个成员叫做 _initXHRData, 是一个function, 在这个function的最后部分有一个if-else分支,如下:

  3. JavaScript对象(一)——Function对象

    写在最前面: 对象只是带有属性和方法的特殊数据类型(js的7种数据类型:字符串,数字,布尔,数组,对象,null,undefined). JavaScript是面向对象的语言,但是JavaScript ...

  4. 一种无new创建对象的方法

    var L=function(){ var obj = { age:38, live:true, job:"web dev" }; obj.name = "zhouhui ...

  5. phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。

    工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...

  6. PHP PSR-2 代码风格规范 (中文版)

    代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...

  7. win 下python2.7 pymssql连接ms sqlserver 2000

    python DB-API 连接mysql 要用到库pymssql 下载请到https://pypi.python.org/pypi/pymssql/2.0.1我这里下载的是ms windows in ...

  8. 【6】使用nginx

    sudo vim /etc/nginx/nginx.conf user root; worker_processes 2; error_log /var/log/nginx/error.log; pi ...

  9. Fedora安装qt总结四种方法

    在fedora上安装qt有四种方法,本人由于初次接触fedora,所以还是耐心的把三个方法都测试了一遍. 1.  下载源码,手动编译,选择路径安装,请参考<fedora15下搭建QT开发环境及编 ...

  10. 将vim作为QT开发的IDE

    转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...