GDB调试总结__1
该博客旨在分享IT技术心得和实际工作中遇到问题的解决方法,下面是新浪博客地址http://blog.sina.com.cn/qianyumolu,则为分享经济、行业趋势、心灵文章等,有兴趣的朋友能够踩踩,讨论分享
也欢迎来群里一起学习交流http://url.cn/LJhxoQ
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
也欢迎来群里一起学习交流http://url.cn/LJhxoQ
我的GDB调试学习思路:
A、怎样启动调试
1、源代码级启动
2、已执行程序启动
B、怎样设置断点、观察点
C、怎样打印相关变量
D、切换线程
E、动态的修改你程式的运行环境
正文
GDB概述
GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具。也许,各位比較喜欢那
种图形界面方式的,像VC、BCB等IDE的调试,但假设你是在UNIX平台下做软件,你
会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,
尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完毕以下四个方面的功能:
1、启动你的程序,能够依照你的自己定义的要求随心所欲的执行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点能够是条件表达式)
3、当程序被停住时,能够检查此时你的程序中所发生的事。
4、动态的改变你程序的运行环境。
A、怎样启动调试
启动GDB的方法有下面几种:
1、gdb program
program 也就是你的运行文件,一般在当前文件夹下。
2、gdb program core
用gdb同一时候调试一个执行程式和core文件,core是程式非法执行后core dump后产生的文件。
3、gdb program ID
假设你的程式是个服务程式,那么你能指定这个服务程式执行时的进程ID。gdb会自己主动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
GDB启动时,能够加上一些GDB的启动开关,具体的开关能够用gdb -help查看。我在下
面仅仅例举一些比較经常使用的參数:
-symbols
-s
从指定文件里读取符号表。
-se file
从指定文件里读取符号表信息,并把他用在可运行文件里。
-core
-c
调试时core dump的core文件。
-directory
-d
增加一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。
在GDB中执行程序
————————
当以gdb 方式启动gdb后,gdb会在PATH路径和当前文件夹中搜索的源文件。如要确认gdb
是否读到源文件,可使用l或list命令,看看gdb能否列出源码。
在gdb中,执行程序使用r或是run命令。程序的执行,你有可能须要设置以下四方面的事。
1、程序执行參数。
set args 可指定执行时參数。(如:set args 10 20 30 40 50)
show args 命令能够查看设置好的执行參数。
2、执行环境。
path
可设定程序的执行路径。
show paths 查看程序的执行路径。
setenvironment varname [=value] 环境变量设置。如:set envUSER=hchen
show environment [varname] 查看环境变量。
3、工作文件夹。
cd
相当于shell的cd命令。
pwd 显示当前的所在文件夹。
4、程序的输入输出。
info terminal 显示你程序用到的终端的模式。
使用重定向控制程序输出。如:run > outfile
tty命令能够指写输入输出的终端设备。如:tty /dev/ttyb
调试已执行的程序
————————
B、设置断点、观察点
1、设置断点
b + 断点 -》设置调试的断点。
两种:
一种是:b CMSTask.cpp:200
表示在CMSTask.cpp文件的第200行设置断点 。
还有一种:b TaskManager::buildPubWinTask
表示在运行buildPubWinTask这个函数的时候停止。
取消断点:
dis 1 表示取消第一个断点
dis 2 表示取消第二个断点
查看设置断点信息: info b
2、设置观察点(WatchPoint)
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,假设有变化,马
上停住程序。我们有以下的几种方法来设置观察点:
watch
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,立即停住程序。
rwatch
当表达式(变量)expr被读时,停住程序。
awatch
当表达式(变量)的值被读或被写时,停住程序。
infowatchpoints
列出当前所设置了的全部观察点。
设置捕捉点(CatchPoint)
你可设置捕捉点来补捉程序执行时的一些事件。如:加载共享库(动态链接库)或是C++
的异常。设置捕捉点的格式为:
catch
当event发生时,停住程序。event能够是以下的内容:
1、throw 一个C++抛出的异常。(throw为keyword)
2、catch 一个C++捕捉到的异常。(catch为keyword)
3、exec 调用系统调用exec时。(exec为keyword,眼下此功能仅仅在HP-UX下实用)
4、fork 调用系统调用fork时。(fork为keyword,眼下此功能仅仅在HP-UX下实用)
5、vfork 调用系统调用vfork时。(vfork为keyword,眼下此功能仅仅在HP-UX下实用)
6、load 或 load 加载共享库(动态链接库)时。(load为keyword,眼下此功能仅仅在HP-UX
下实用)
7、unload 或 unload 卸载共享库(动态链接库)时。(unload为keyword,眼下此功能仅仅在
HP-UX下实用)
tcatch
仅仅设置一次捕捉点,当程序停住以后,应点被自己主动删除。
GDB调试总结__1的更多相关文章
- GDB调试命令小结
1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...
- gdb调试器的使用
想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车 是运行上一个命令 ...
- 20145212——GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...
- gdb调试PHP扩展错误
有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ...
- gdb调试汇编堆栈过程的学习
gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...
- gdb调试
·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(v ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- GDB调试汇编堆栈
GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...
随机推荐
- WPF 进度条
//Create a Delegate that matches the Signature of the ProgressBar's SetValue method private delegate ...
- AngularJS初体验
最近突然发现,Coding.net真是一个神奇的网站.这各网站90%的请求都是通过ajax完成的.可以发现,不管你点任何链接,网页都不会刷新,点击浏览器的返回或前进按钮也是这样,打开chrome的开发 ...
- SurfaceFlinger服务概述和学习计划
SurfaceFlinger服务负责绘制Android应用程序的UI 实现相当复杂,要从正面分析它的实现不是一件容易的事.既然不能从正面分析,我们就想办法从侧面分析.说到底,无论SurfaceFlin ...
- Linux Curses编程实现贪吃蛇
curses库 简单而言,提供UNIX中多种终端 操作光标和显示字符 的接口.我们常见的vi就是使用curses实现的.现在一般都用ncurses库. Linux下curses函数库 Linux ...
- 使用PHP生成二维码的两种方法(带logo图像)
一.利用Google API生成二维码 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- C#与C++的几个不同之处知识点
1.索引器 索引器是C#自创的内容,这是C++当中没有的内容,所以做一次笔记. 索引器是用于书写一个可以通过使用[]想数组一样直接访问集合元素的方法.我们只需要指定待访问实例或元素的索引.索引器的语法 ...
- 玩转C++运算符重载
运算符重载语法:返回值类型 operator运算符(参数列表) { 代码逻辑... } C++中的运算符重载是通过函数来实现的,可以将重载的运算符看作是类成的一个成员函数,向普通函数一样调用.如重 ...
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- appFramework在三星某些机型上的兼容问题
有个问题困扰了安卓哥好几天 一个带有fixed抬头的列表页,在向上swipe的时候,有一定概率会把整个画面滚动上去,就连fixed的部分也移动了. 于是哥觉得是webview的问题,找了各种选项,禁用 ...
- 网站性能优化— WebP 全方位介绍
谈到优化网站性能时,主要目标之一就是减少要发送到浏览器的数据量(即 payload).而当前,图片通常是页面构成中最耗费流量的部分,因此降低图片的大小是一个最为有效的优化网页前端性能的办法. 有很多工 ...