- 浏览: 439139 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
su6838354:
我有点疑问啊,thread1中的i自增的慢的话,thread2 ...
浅析pthread_cond_wait -
zeronever:
请问pthread_cond_signal有解锁操纵吗?我在p ...
浅析pthread_cond_wait -
paladin1988:
你这帖子真心不错。。
浅谈bitmap算法 -
parabellum_sky:
昨天还有个姑娘让我去考我说会考虑
个人日志
Linux GDB(二)
文章来源:http://blog.csdn.net/haoel/article/details/2880
GDB的命令概貌
———————
启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:
/home/hchen> gdb
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux".
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands
Type "help" followed by a class name for a list of commands in that class.
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.
(gdb)
gdb的命令很多,gdb把之分成许多个种类。help命令只是例出gdb的命令种类,如果要看种类中的命令,可以使用help <class> 命令,如:help breakpoints,查看设置断点的所有命令。也可以直接help <command>来查看命令的帮助。
gdb中,输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了,当然,命令的前几个字符应该要标志着一个唯一的命令,在Linux下,你可以敲击两次TAB键来补齐命令的全称,如果有重复的,那么gdb会把其例出来。
示例一:在进入函数func时,设置一个断点。可以敲入break func,或是直接就是b func
(gdb) b func
Breakpoint 1 at 0x8048458: file hello.c, line 10.
示例二:敲入b按两次TAB键,你会看到所有b打头的命令:
(gdb) b
backtrace break bt
(gdb)
示例三:只记得函数的前缀,可以这样:
(gdb) b make_ <按TAB键>
(再按下一次TAB键,你会看到:)
make_a_section_from_file make_environ
make_abs_section make_function_type
make_blockvector make_pointer_type
make_cleanup make_reference_type
make_command make_symbol_completion_list
(gdb) b make_
GDB把所有make开头的函数全部例出来给你查看。
示例四:调试C++的程序时,有可以函数名一样。如:
(gdb) b 'bubble( M-?
bubble(double,double) bubble(int,int)
(gdb) b 'bubble(
你可以查看到C++中的所有的重载函数及参数。(注:M-?和“按两次TAB键”是一个意思)
要退出gdb时,只用发quit或命令简称q就行了。
GDB中运行UNIX的shell程序
————————————
在gdb环境中,你可以执行UNIX的shell的命令,使用gdb的shell命令来完成:
shell <command string>
调用UNIX的shell来执行<command string>,环境变量SHELL中定义的UNIX的shell将会被用来执行<command string>,如果SHELL没有定义,那就使用UNIX的标准shell:/bin/sh。(在Windows中使用Command.com或cmd.exe)
还有一个gdb命令是make:
make <make-args>
可以在gdb中执行make命令来重新build自己的程序。这个命令等价于“shell make <make-args>”。
在GDB中运行程序
————————
当以gdb <program>方式启动gdb后,gdb会在PATH路径和当前目录中搜索<program>的源文件。如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。
在gdb中,运行程序使用r或是run命令。程序的运行,你有可能需要设置下面四方面的事。
1、程序运行参数。
set args 可指定运行时参数。(如:set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。
2、运行环境。
path <dir> 可设定程序的运行路径。
show paths 查看程序的运行路径。
set environment varname [=value] 设置环境变量。如:set env USER=hchen
show environment [varname] 查看环境变量。
3、工作目录。
cd <dir> 相当于shell的cd命令。
pwd 显示当前的所在目录。
4、程序的输入输出。
info terminal 显示你程序用到的终端的模式。
使用重定向控制程序输出。如:run > outfile
tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb
调试已运行的程序
————————
两种方法:
1、在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb <program> PID格式挂接正在运行的程序。
2、先用gdb <program>关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程的PID。并用detach来取消挂接的进程。
暂停 / 恢复程序运行
—————————
调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。你可以设置程序的在哪行停住,在什么条件下停住,在收到什么信号时停往等等。以便于你查看运行时的变量,以及运行时的流程。
当进程被gdb停住时,你可以使用info program 来查看程序的是否在运行,进程号,被暂停的原因。
在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是continue命令。
一、设置断点(BreakPoint)
我们用break命令来设置断点。正面有几点设置断点的方法:
break <function>
在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。
break <linenum>
在指定行号停住。
break +offset
break -offset
在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum
在源文件filename的linenum行处停住。
break filename:function
在源文件filename的function函数的入口处停住。
break *address
在程序运行的内存地址处停住。
break
break命令没有参数时,表示在下一条指令处停住。
break ... if <condition>
...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。
查看断点时,可使用info命令,如下所示:(注:n表示断点号)
info breakpoints [n]
info break [n]
二、设置观察点(WatchPoint)
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:
watch <expr>
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
rwatch <expr>
当表达式(变量)expr被读时,停住程序。
awatch <expr>
当表达式(变量)的值被读或被写时,停住程序。
info watchpoints
列出当前所设置了的所有观察点。
三、设置捕捉点(CatchPoint)
你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:
catch <event>
当event发生时,停住程序。event可以是下面的内容:
1、throw 一个C++抛出的异常。(throw为关键字)
2、catch 一个C++捕捉到的异常。(catch为关键字)
3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
6、load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
7、unload 或 unload <libname> 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)
tcatch <event>
只设置一次捕捉点,当程序停住以后,应点被自动删除。
发表评论
-
关于Java中几种loadClass的讨论
2016-01-21 14:12 2342... -
UNIX网络编程源码和头文件的使用
2011-09-04 11:16 20691.编译《UNP》 http://www.unpbook.c ... -
gedit和vim打开中文显示乱码(转)
2011-09-03 16:36 1175gedit和vim打开中文显示乱码,下面是解决方法 打开vim ... -
字符界面默认不显示中文
2011-09-02 16:39 930字符界面默认不显示中文,全是菱形符号 首先安装zhcon: $ ... -
ubuntu 终端环境变换
2011-09-02 15:52 14351.Ubuntu终端命令行下的默认语言改为英语 修改Ubun ... -
APUE2源代码编译和单个源文件的编译(转载)
2011-09-01 19:37 1413因为对linux感兴趣,所以一直在学习与之相关的东西。最近下载 ... -
《UNIX环境高级编程》
2011-09-01 17:23 11011.直接进入源码目录的lib目录 cd lib 2.执行m ... -
小企鹅输入法
2011-09-01 16:28 760Fcitx──小企鹅输入法最大的特点是容易安装和使用,无论是拼 ... -
ubuntu 中文 TO英文
2011-09-01 15:41 755为了使用起来方便,装了ubuntu中文版,自然在home文 ... -
Red-hat 修改ls目录颜色
2011-08-31 21:46 1440文本界面下,红帽用蓝色作为ls的目录的颜色,配合他的黑色背景, ... -
linux下解压命令大全
2011-08-19 23:33 759linux下解压命令大全 .tar 解包:tar xvf F ... -
Linux GDB(七)
2011-08-01 11:50 883Linux GDB(七) 改变程序的执行 ——————— ... -
Linux GDB(六)
2011-08-01 11:49 612Linux GDB(六) 七、设置显示选项 GDB ... -
Linux GDB(五)
2011-08-01 11:48 992Linux GDB(五) 查看运行时数据 ——————— ... -
Linux GDB(四)
2011-08-01 11:46 1113Linux GDB(四) 查看栈信息 ————— 当程序被 ... -
Linux GDB(三)
2011-08-01 11:45 735Linux GDB(三) 四、维护停止点 上面说了如何设置 ... -
Linux GDB(一)
2011-08-01 11:40 1057Linux GDB(一) 文章来源:http://blog. ... -
Linux-vim设置
2011-06-11 16:29 1188在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显 ... -
Linux-Vi 命令
2011-06-11 14:19 787文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑 ... -
linux-压缩和解压缩
2011-03-30 10:30 845linux-压缩和解压缩 1.解压缩 tar -zxvf ...
相关推荐
在Linux开发环境中,GDB(GNU调试器)是进行源码级调试的重要工具,尤其适用于C/C++语言编程。其全称为"The gnu Source-Level Debugger",是GNU项目的一部分。随着版本*.*.*.**的发布,GDB不仅保持了其作为源码级...
1. **GDB安装**:介绍如何在Linux环境中安装GDB,包括通过包管理器或源码编译的方式。 2. **基本使用**:讲解如何启动GDB,设置源代码路径,以及加载调试目标。 3. **断点管理**:详述如何设置、删除和启用/禁用...
分享一套课程——Linux GDB C/C++调试基础与提升视频课程,提供源码+PPT下载。
Linux中的GDB(GNU调试器)是一款强大的源代码级调试工具,主要用于C和C++程序。这个绿色版的GDB意味着它是一个便携式的版本,无需通过编译或配置系统级别的安装过程,用户可以直接在指定目录下运行。这使得在不同...
在Linux操作系统中,GDB(GNU调试器)是一款强大的命令行工具,用于调试C、C++、Fortran、Python等编程语言编写的程序。这款工具允许开发者在运行时检查程序的状态,包括变量值、内存区域、调用栈等,帮助找出程序中...
【Linux GDB命令手册】 GDB(GNU Debugger)是一款强大的调试工具,主要用于C和C++程序,但也支持其他语言。在Linux环境下,GDB可以帮助开发者定位和修复代码中的错误,提高软件的质量。以下是对GDB命令的详细说明...
Gdb,全称为GNU调试器(GNU Debugger),是一款强大的开源调试工具,主要用于C、C++以及其他支持的语言在Linux操作系统上的程序调试。它允许开发者在运行时检查程序的状态,包括变量值、内存空间、调用堆栈等,从而...
Linux下GDB的移植 GDB是GNU开放源代码的调试器,广泛应用于Linux系统中。为了在Linux下进行程序调试,需要将GDB移植到目标平台上。本文将详细介绍GDB的移植步骤,包括准备工作、编译ncurses、编译GDB、测试等环节。...
嵌入式Linux GDB调试技术 嵌入式Linux GDB调试技术是指在嵌入式系统中使用GDB调试程序的一种技术。GDB(GNU Debugger)是一种功能强大且灵活的调试器,可以在各种平台上使用。嵌入式Linux GDB调试技术的主要目的是...
linux下使用gdb调试程序的教程。 详细讲解gdb工具的使用,以及调试技巧等。 linux上常用调试技术: 走读代码 打印日志 /proc/pid/... gdb、dbx strace、ltrace valgrind
### ARM-Linux-GDB 构建与调试指南 #### 概述 在嵌入式开发领域,ARM架构因其低功耗、高性能等特性被广泛应用。为了有效地进行ARM平台上的程序调试,开发人员通常会选择使用ARM-Linux-GDB(以下简称GDB)。本文将...
Linux GDB 调试 C++ 入门 GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。它可以帮助开发者完成四个方面的功能:启动程序、设置断点、检查程序状态和动态改变执行环境。与图形化调试工具相比,GDB ...
Linux 调试工具 GDB 简明指南 GDB(GNU Debugger)是 Linux 系统中的一款强大调试工具,用于调试 C 和 C++ 程序。它使用户可以在程序运行时观察程序的内部结构和内存的使用情况。GDB 提供了多种功能,如监视程序中...
linux gdb test example
### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...
在Linux操作系统中,GDB(GNU Debugger)是一个强大的命令行工具,用于调试C、C++以及其他支持的语言编译的程序。GDB可以帮助开发者追踪代码执行流程,定位和修复程序中的错误,是Linux环境下进行软件开发不可或缺的...
Linux GDB中文完全手册是一本全面介绍在Linux环境下如何使用GNU调试器(GDB)的教程,特别适合初入Linux开发领域的学习者,尤其是对英文文档理解有困难的开发者。GDB是一款强大的源代码级调试器,它允许程序员在运行...
### Linux 下 GDB 调试工具详解 #### GDB 概述 GDB(GNU Debugger)是一款由GNU项目开发的、广泛应用于Unix系统及类Unix系统的强大调试工具。它支持C、C++、Objective-C、Ada以及Pascal等多种语言,并能够通过标准...
Linux下的GDB(GNU Debugger)是一款强大的调试工具,用于帮助开发者在程序运行时发现和修复错误。当程序出错并产生core dump文件时,GDB能够帮助快速定位问题所在,从而提高调试效率。以下是关于GDB使用的一些关键...