- 浏览: 599794 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
oldrat:
还给出了 给出“对于多条A记录是采用什么策略返回IP”的结论, ...
【转载】关于java dns cache (域名缓存时间) -
snowing0427:
特地登录来感谢一下楼主~!!!
nginx里的break和last -
夏日小草:
403禁止了。
User Agent信息大全 -
uag:
比如从请求头里的$HOST变量里获取。(针对nginx,需要加 ...
nginx替换apache中的一个跳转问题 -
thinktothings:
修改Makefile文件 在哪,怎么修改?
使用sz,rz命令来上传和下载文件
之前早就听说GDB是个神器,
象我这样的菜鸟也就只能使用一下最基础的GDB功能了。
简单的使用流程可以这样描述:
· 编译需要调试的程序,在gcc 时加上 -g 参数,允许使用GDB调试
· 使用" gdb ./program "来运行程序
· 使用" set args your_args "来设置程序的参数
· 进入gdb界面后,用" list "命令来向下查看代码,用" list - "命令来向上查看代码
· 在可能出错的地方设置断点,使用 “ break 行号 ” 命令。
· 运行程序,使用“ run ”命令,gdb会在断点停下来
· 使用“ step "或者" next "来一步一步查看程序的运行状态
· 使用“ quit ” 退出gdb。
一个小时前靠着gdb解决了一个程序中的段错误……
不用gdb调试,我想我根本不知道这个段错误是错在哪里。。。。
网上有更多的用法:
摘录一个
http://www.cnblogs.com/resound/archive/2010/06/18/1759895.html 写道
GDB用法小结
1. gdb exe
使得exe程序运行在debug环境下
2. break functiona
在functiona函数处设置端点
3. run
让程序从main入口执行到断点functiona
4. n
next,单步执行,相当于VC中的调试命令step over
5. s
step into,进入子函数,察看子函数的执行情况
6. bt
backtrace查看堆栈的情况
7. p variant
print出变量variant的值
8. l
list命令,查看当前的行的上下文,默认显示10行
9. p variant=correct value
如果发现此时的variant的值不正确,我们可以给variant设置一个正确的值(correct value)
然后,用第10项中的命令继续执行
10. c
continue 继续执行,可以是经过按照更改后的值继续执行。相当于VC中的F5
11. quit or Ctrl+C
退出gdb
在gdb的命令行下,可以通过file exeprogram 载入要debug的文件
gdb -silent 表示不提示GDB的版权信息 or gdb -q (quiet)
gdb -h 显示gdb的帮助
12 About Help
gdb>help
apropos args //查找所有的GDB命令以及它的文档中包含args的表达式
complete i //列出所有以i开头的gdb命令
针对某一个命令的帮助是help command ,例如help info
显示info的用法,info 可以查看args,breakpoints,stack......
show命令只要是显示gdb的信息,如show version
13 break
break function
在某一个函数的地方设置端点
break linenum
在确定的某一行的地方设置断点
break +offset
-offset
break *address在某一个地址设置断点
14 watch
watch expr
查看某一个表达式
rwatch expr
查看某一个表达式,并在读入该表达式的时候,设置断点
15 查看源代码
list lineNum 在lineNum的前后源代码显示出来
list + 列出当前行的后面代码行
list - 列出当前行的前面代码行
list function
set listsize count
设置显示代码的行数
show listsize
显示打印代码的行数
list first,last
显示从first到last的源代码行
16 编辑源代码
edit 编辑当前所在的行
edit num
edit function 编辑包含函数定义的文件
edit filename:function
设置编辑器
EDITOR=/usr/bin/vi
export EDITOR
gdb ....
转载:
GDB的使用
当程序出错并产生core 时
快速定位出错函数的办法
gdb 程序名 core文件名(一般是core,也可能是core.xxxx)
调试程序使用的键
r run 运行.程序还没有运行前使用
c cuntinue 继续运行。运行中断后继续运行
q 退出
kill 终止调试的程序
h help 帮助
<tab>; 命令补全功能
step 跟入函数
next 不跟入函数
b breakpoint 设置断点。
用法:
b 函数名 对此函数进行中断
b 文件名:行号 对此文件中指定行中断.如果是当前文件,那么文件名与:号可以
省略
看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.
l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面
跟上 文件名:行号
watch 观察一个变量的值。每次中断时都会显示这个变量的值
p print 打印一个变量的值。与watch不同的是print只显示一次
这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,
这时候你会看到 b 的 value, 也就是上面的 $1 = 15.
你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,
这时候你会发现, b 的 value 就变成 100 了:$1 = 100.
网上抄录
基本的使用方法简介
前言
程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。
一个除错程序执行的流程通常是这样的:
1. 进入除错程序并指定可执行文件。
2. 指定程序代码所在目录。
3. 设定断点后执行程序。
4. 程序于断点中断后,可以 (1)检视程序执行状态;检视变量值或变更变量值 (2) 逐步执行程序,或是全速执行程序到下一个断点或是到程序结束为止。
5. 离开除错程序。
以下将分为下列数项分别介绍:
1. 进入 GDB 及指定可执行档
2. 指定程序代码所在目录及检视程序代码
3. 断点的设定与清除
4. 全速及逐步执行程序
5. 检视及更改变量值
6. 检视程序执行状态
7. 读取 Core 文件信息
进入 GDB 及指定可执行档:
1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM'),准备进行除错。
gdb PROGRAM
指定程序代码所在目录及检视程序代码
1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下,就不须指定程序代码所在目录。):
(gdb) directory DIR
2. 检视程序代码,格式计有:
(gdb) list =>; 显示目前执行程序代码前后各五行的程序代码;或是显示从上次 list 之后的程序代码
(gdb) list function =>; 显示该程序开始处前后五行的程序代码。
(gdb) list - =>;上次显示程序代码的前面的十行。
断点的设定与清除
1. 设定断点(指令为 break,可简写为 (b),格式计有:
(gdb) break filename.c:30 =>; 在 filename.c 的第三十行处停止执行。
(gdb) break function =>; 在进入 function 时中断程序的执行。
(gdb) break filename.c:function =>; 在程序代码档 filename.c 中的函数 function 处设定断点。
(gdb) break =>; 在下一个将被执行的命令设定断点。
(gdb) break ... if cond =>; 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。
2. 显示各个断点的信息。
(gdb) info break
3. 清除断点(命令为 clear),格式同 break 。例如 :
(gdb) clear filename.c:30
4. 清除断点,NUM 是在 info break 显示出来的断点编号。
(gdb) delete NUM
全速及逐步执行程序
1. 从程序开头全速执行程序,直到遇到断点或是程序执行完毕为止。
(gdb) run
2. 在程序被中断后,全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。
(gdb) continue
3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。
(gdb) next
4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。
(gdb) step
5. 执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。
(gdb) until
6. 执行现行程序到回到上一层程序为止。
(gdb) finish
检视及更改变量值
1. print 叙述,显示该叙述执行的结果 (print 指令可简写为 p)。如
(gdb) print a =>; 显示 a 变量的内容.
(gdb) print sizeof(a) =>; 显示 a 变量的长度.
2. display 叙述,在每个断点或是每执行一步时显示该叙述值。如
(gdb) display a
3. 更改变量值:
(gdb) print (a=10) =>; 将变量 a 的值设定为 10.
检视程序执行状态
1. 查看程序执行到此时,是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt),也就是查看函数呼叫堆栈。
(gdb) backtrace
读取 Core 文件信息
1. 读入 PROGRAM 及 PROGRAM.CORE 档,可检视 Core Dump 时程序变量值及程序流程状态 。
gdb PROGRAM core
说明:'core' 档案是由 PROGRAM 档执行后,遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档,我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后,你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。
1. gdb exe
使得exe程序运行在debug环境下
2. break functiona
在functiona函数处设置端点
3. run
让程序从main入口执行到断点functiona
4. n
next,单步执行,相当于VC中的调试命令step over
5. s
step into,进入子函数,察看子函数的执行情况
6. bt
backtrace查看堆栈的情况
7. p variant
print出变量variant的值
8. l
list命令,查看当前的行的上下文,默认显示10行
9. p variant=correct value
如果发现此时的variant的值不正确,我们可以给variant设置一个正确的值(correct value)
然后,用第10项中的命令继续执行
10. c
continue 继续执行,可以是经过按照更改后的值继续执行。相当于VC中的F5
11. quit or Ctrl+C
退出gdb
在gdb的命令行下,可以通过file exeprogram 载入要debug的文件
gdb -silent 表示不提示GDB的版权信息 or gdb -q (quiet)
gdb -h 显示gdb的帮助
12 About Help
gdb>help
apropos args //查找所有的GDB命令以及它的文档中包含args的表达式
complete i //列出所有以i开头的gdb命令
针对某一个命令的帮助是help command ,例如help info
显示info的用法,info 可以查看args,breakpoints,stack......
show命令只要是显示gdb的信息,如show version
13 break
break function
在某一个函数的地方设置端点
break linenum
在确定的某一行的地方设置断点
break +offset
-offset
break *address在某一个地址设置断点
14 watch
watch expr
查看某一个表达式
rwatch expr
查看某一个表达式,并在读入该表达式的时候,设置断点
15 查看源代码
list lineNum 在lineNum的前后源代码显示出来
list + 列出当前行的后面代码行
list - 列出当前行的前面代码行
list function
set listsize count
设置显示代码的行数
show listsize
显示打印代码的行数
list first,last
显示从first到last的源代码行
16 编辑源代码
edit 编辑当前所在的行
edit num
edit function 编辑包含函数定义的文件
edit filename:function
设置编辑器
EDITOR=/usr/bin/vi
export EDITOR
gdb ....
转载:
GDB的使用
当程序出错并产生core 时
快速定位出错函数的办法
gdb 程序名 core文件名(一般是core,也可能是core.xxxx)
调试程序使用的键
r run 运行.程序还没有运行前使用
c cuntinue 继续运行。运行中断后继续运行
q 退出
kill 终止调试的程序
h help 帮助
<tab>; 命令补全功能
step 跟入函数
next 不跟入函数
b breakpoint 设置断点。
用法:
b 函数名 对此函数进行中断
b 文件名:行号 对此文件中指定行中断.如果是当前文件,那么文件名与:号可以
省略
看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.
l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面
跟上 文件名:行号
watch 观察一个变量的值。每次中断时都会显示这个变量的值
p print 打印一个变量的值。与watch不同的是print只显示一次
这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,
这时候你会看到 b 的 value, 也就是上面的 $1 = 15.
你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,
这时候你会发现, b 的 value 就变成 100 了:$1 = 100.
网上抄录
基本的使用方法简介
前言
程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。
一个除错程序执行的流程通常是这样的:
1. 进入除错程序并指定可执行文件。
2. 指定程序代码所在目录。
3. 设定断点后执行程序。
4. 程序于断点中断后,可以 (1)检视程序执行状态;检视变量值或变更变量值 (2) 逐步执行程序,或是全速执行程序到下一个断点或是到程序结束为止。
5. 离开除错程序。
以下将分为下列数项分别介绍:
1. 进入 GDB 及指定可执行档
2. 指定程序代码所在目录及检视程序代码
3. 断点的设定与清除
4. 全速及逐步执行程序
5. 检视及更改变量值
6. 检视程序执行状态
7. 读取 Core 文件信息
进入 GDB 及指定可执行档:
1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM'),准备进行除错。
gdb PROGRAM
指定程序代码所在目录及检视程序代码
1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下,就不须指定程序代码所在目录。):
(gdb) directory DIR
2. 检视程序代码,格式计有:
(gdb) list =>; 显示目前执行程序代码前后各五行的程序代码;或是显示从上次 list 之后的程序代码
(gdb) list function =>; 显示该程序开始处前后五行的程序代码。
(gdb) list - =>;上次显示程序代码的前面的十行。
断点的设定与清除
1. 设定断点(指令为 break,可简写为 (b),格式计有:
(gdb) break filename.c:30 =>; 在 filename.c 的第三十行处停止执行。
(gdb) break function =>; 在进入 function 时中断程序的执行。
(gdb) break filename.c:function =>; 在程序代码档 filename.c 中的函数 function 处设定断点。
(gdb) break =>; 在下一个将被执行的命令设定断点。
(gdb) break ... if cond =>; 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。
2. 显示各个断点的信息。
(gdb) info break
3. 清除断点(命令为 clear),格式同 break 。例如 :
(gdb) clear filename.c:30
4. 清除断点,NUM 是在 info break 显示出来的断点编号。
(gdb) delete NUM
全速及逐步执行程序
1. 从程序开头全速执行程序,直到遇到断点或是程序执行完毕为止。
(gdb) run
2. 在程序被中断后,全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。
(gdb) continue
3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。
(gdb) next
4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。
(gdb) step
5. 执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。
(gdb) until
6. 执行现行程序到回到上一层程序为止。
(gdb) finish
检视及更改变量值
1. print 叙述,显示该叙述执行的结果 (print 指令可简写为 p)。如
(gdb) print a =>; 显示 a 变量的内容.
(gdb) print sizeof(a) =>; 显示 a 变量的长度.
2. display 叙述,在每个断点或是每执行一步时显示该叙述值。如
(gdb) display a
3. 更改变量值:
(gdb) print (a=10) =>; 将变量 a 的值设定为 10.
检视程序执行状态
1. 查看程序执行到此时,是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt),也就是查看函数呼叫堆栈。
(gdb) backtrace
读取 Core 文件信息
1. 读入 PROGRAM 及 PROGRAM.CORE 档,可检视 Core Dump 时程序变量值及程序流程状态 。
gdb PROGRAM core
说明:'core' 档案是由 PROGRAM 档执行后,遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档,我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后,你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。
发表评论
-
echo命令的一个疑问
2012-12-06 17:14 1349今天在做日志处理的时 ... -
svn update命令小记
2012-09-07 17:07 16282今天在使用svn update命令的时候,出现了这么一个提示: ... -
由wget引起的血案
2012-07-30 15:59 3262由于刚刚配置好yum源, 所以试着装了JDK,之后又发现rp ... -
【转载】串口编程
2012-05-16 21:58 4466.串口概述 常见数据通信方式:并行通信,串行通信 UA ... -
使用头文件来链接多个c源文件
2012-05-14 11:27 2858在目前的设计中, 我写了2个c源文件,a.c和b.c,我需要 ... -
malloc函数引起的意外错误
2012-05-14 00:39 6998在实现一个简单的字符对应函数的过程中发现了这个不算是BUG的错 ... -
使用libxml2创建和解析xml文件
2012-05-06 13:22 5554毕业设计需要用到xml文件来组织和存放数据, 对于Linux ... -
C语言解析xml文件遇到的一个编译问题
2012-04-26 12:20 7627在用libxml2尝试做解析xml文件,编译的时候出现了找不到 ... -
【转载】su和sudo命令的区别与使用技巧
2012-04-12 23:21 1525一. 使用 su 命令临时切换用户身份 1、su ... -
Ubuntu下安装GTK
2012-03-27 23:15 15129毕业设计需要用 ... -
Linux下使用tcpdump使用
2012-03-17 01:04 5776使用命令: [root@Cent ... -
如何获得Linux常用终端程序源代码
2012-03-11 11:38 3216近几天在学习C语言,需要查看一下Linux里简单的常用终端程序 ... -
【收集】vi、vim键盘图和命令壁纸
2012-03-11 11:02 15592vi/vim 编辑器,一些命令经常记不住,收集到两张图,在不记 ... -
《C程序设计语言》学习记录(未完结,不定时更新)
2012-03-10 23:58 16881. 不等号的优先级高于 ... -
perl升级安装
2011-11-29 12:37 7450Linux服务器,perl版本为5.8.*, 最近在学习pe ... -
awk的内置变量
2011-10-24 15:12 201awk中有许多系统变量或内置变量。 这里分两种: -- ... -
【转】lsof命令
2011-10-24 14:02 1216lsof(list open files)是一个列出当前 ... -
seq命令
2011-10-15 14:17 1534seq命令: 用来产 ... -
sar命令
2011-10-15 13:32 2389DESCRIPTION: The sar com ... -
dig命令
2011-10-15 12:51 4833dig命令介绍: dig的全称是 (domain i ...
相关推荐
GDB的使用方法,适合初学者简单地查看和学习。里面有源程序实例供学习参考
本文档用于的unix下GDB调试,文中包含简单的gdb调试命令使用方法,并提供了用例
内容包括 gdb-20010428-3[1].tar.bz2 和gdb-20020411-1[1].tar.bz2 已经简单的说明文档 gdb2.pdf ,具体看gdb2.pdf
自己整理的中文GDB简易使用指南,希望大家喜欢。不足处请提出改进意见,谢谢!
GDB基础PPT 对GDB基本命令进行讲解,配合简单的实例
很好的一本介绍gdb调试的书籍,一学就会,强烈推荐
gdb命令详解 简单扼要地使用找一张命令表记录了gdb的相关调试命令,及其详细用法,对查阅gdb调试命令带来非常了方便!
本文档为GDB使用和调试手册,可以根据本文档快速掌握GDB调试技巧,简单、易懂、全面!可以关注本人博客GDB调试篇快速掌握GDB技巧!
UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。于是UNIX下的软件比Windows下的...
•file 装入想要调试的可执行文件. •kill 终止正在调试的程序. •list 列出产生执行文件的源代码的一部分. •next 执行一行源代码但不进入函数内部. ...•shell 使你能不离开gdb就执行UNIX shell 命令
linux环境下,代码调试,多线程调试,常用调试方式快速定位问题
gdb用户手册,英文的,还有中文的简单介绍如何使用gdb以及实际例子的。
SublimeGDB, GDB与 sublime text 2的集成 描述sublime text 2的GDB插件。 归档问题不受欢迎,( 因此被禁用) 。...安装安装SublimeGDB最简单的方法是通过出色的包控制插件请参见 http://wbond.net/sublime_pack
GDB调试工具常用命令使用手册,完美中文版,简单易懂,文中有十分详细的操作说明,十分适合相应的技术人员下载使用,欢迎下载使用
简单总结了gdb调试的一些方法
gdb的常用命令,很适合初学者参考使用,它提供了常用指令简单的说明,简洁明了。
平时开发中我们可以使用qtcreator或者eclipse的ide进行调试,方便又快捷,但是我们无法用ide调试实机或者模拟器中运行的程序,这个时候gdb的作用就体现出来了。 无数次我们面对实机,发现一个程序挂了,苦于无法...
本文所述主要是Linux调试工具GDB的使用教程,具体如下。 声明:本博客内容是由本人经过实验楼教程整理得来。 GDB的相关概念 GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点...
非常实用 非常好的gdb调试手册给大家共享 步骤详细 一学即会 跟着一步一步调试就会了 so easy
不错的gdb使用手册,内容详细,简单易懂。作者用心良苦,想学习gdb调试的不妨下载使用学习一下.