该博客旨在分享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的更多相关文章

  1. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  2. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  3. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

  4. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  5. gdb调试PHP扩展错误

    有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ...

  6. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

  7. gdb调试

    ·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(v ...

  8. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  9. GDB调试汇编堆栈

    GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...

随机推荐

  1. angularjs入门整理

    之前发过一篇博文,从mobile angular ui的demo和其官网初识整个angularjs的大体使用,但是没很好学习,只是通过一些技术博文初步认识,陷入很多坑.所以现在在中文官网正式整理下知识 ...

  2. paramiko学习

    1. ssh简介 2. ssh私有key/共有key的区别 3. paramiko的常规使用

  3. 修改虚拟机linux硬盘的大小

    一.概述 Ubuntu用了一段时间,系统已从原来的4G增长到8G,导致虚拟磁盘不够用,需要修改虚拟硬盘的大小. 但是,修改虚拟机硬盘的大小不像修改内存那么简单,操作一个滑动条就轻松搞定.要知道虚拟硬盘 ...

  4. Spring(一)——总体介绍

           spring框架,是进行对象管理,对象关联,解耦的一个中间层框架.SSH(Struts+Spring+hibernate)三大Spring在中间就起着一个承上启下的作用.好,首先我们先来 ...

  5. nutch-1.7 编译

    转载自:http://peigang.iteye.com/blog/1563288 从nutch-.3开始 本地抓取(单击) 和 分布式抓取(集群)所使用的配置文件和命令单独分开. 资源:下载地址:h ...

  6. servlet监听器实现在线人数统计

    一.准备知识 servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. filter:fi ...

  7. 定制ckeditor的菜单

    修改配置文件config.js来定制cheditor的菜单,需要以下步骤: 1.找到ckeditor安装目录的config.js文件 2.记下要使用的功能名,以下的"-"代表分隔符 ...

  8. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  9. 【转】Linux命令之查看文件占用空间大小-du,df

    原文网址:http://blog.csdn.net/wangjunjun2008/article/details/19840671 du(disk usage),顾名思义,查看目录/文件占用空间大小 ...

  10. android新建项目时 出现appcompat_v7工程错误和红色感叹号

    最近初学android,版本是22.6.0的话,每次创建一个项目就会出现一个appcompat_v7工程:然后我升级到最新的版本23.0.4之后,创建第一个项目,也会出现一个appcompat_v7工 ...