gdb零散学习心得。
引用:
记录学习心得。未来将统一整理。
一、基础知识
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零散学习心得。的更多相关文章
- Linux下程序的机器级表示学习心得
Linux下程序的机器级表示学习心得 上周学习完Linux程序的机器级表示后,对于其中有些还是掌握的不太透彻.对于老师提出的关于本章一些细节的问题还是有不会,所以又重新温习了一下上周的学习内容,以下为 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
随机推荐
- iOS 判断设备是否越狱
我们在开发过程中,需要知道设备是否越狱,在网上查看很多资料,为此封装一些判断的方法. 上代码,不解释: .h文件 #import <Foundation/Foundation.h> @in ...
- Intellij Idea 创建Web项目入门(一)转
Intellij Idea 创建Web项目入门(一) 相关软件: Intellij Idea14:http://pan.baidu.com/s/1nu16VyD JDK7:http://pan.bai ...
- 看到的一些js小知识
向数组结尾添加元素高效方法: var arr = [1,2,3]; arr[arr.length] = 4 头部: var a = [1,2,3]; a.concat(4,5); // 1,2,3,4 ...
- Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解
1) struts-default.xml 这个文件是struts2框架默认加载的配置文件.它定义struts2一些核心的bean和拦截器. <?xml version="1.0&qu ...
- Hadoop常见异常及其解决方案
1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...
- 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】
1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.2.1 (2) hbase-0.90.4 (3)solr-4.9.0 并解压至/usr/search 2.Nutch的配置 ...
- 通过meteor实现的一个照片墙
always love tech 初次使用meteor所遇到的一个问题: insert failed: Method '/pictures/insert' not found 提示没有这个方法,然后可 ...
- Hello Word!
第一次来博客园,作为技术的基站,多余的话不说了,就一个helloword! <script type="text/javascript"> //等待dom元素加载完毕. ...
- 实现js浮点数加、减、乘、除的精确计算(网上很多文章里的方法是不能解决所有js浮点数计算误差的)
最近做项目,要用到js的加.减.乘.除的计算,发现js浮点数计算会有一些误差. 网上有很多文章都有js浮点数计算误差的解决方法,说能解决这个问题,But…….比如一个加法函数,如下: function ...
- DotNetNuke-DNN Module模块引用自定义CSS或者JS文件
当新增一个module时,有时会引用自定义的或者第三方CSS.JS文件. 1.添加自定义的CSS时,可以直接在module的根目录下添加module.css,然后框架会自动加载此CSS: 2.这个比较 ...