GDB手册中文版.doc

上传人:sk****8 文档编号:3520007 上传时间:2019-06-01 格式:DOC 页数:47 大小:188.76KB
下载 相关 举报
GDB手册中文版.doc_第1页
第1页 / 共47页
GDB手册中文版.doc_第2页
第2页 / 共47页
GDB手册中文版.doc_第3页
第3页 / 共47页
GDB手册中文版.doc_第4页
第4页 / 共47页
GDB手册中文版.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、GDB 用户手册目录目录 .1摘要 .2自由软件 .2自由软件急需自由文档 .2GDB 的贡献者们 .41一个简单的 GDB 会话 .82征服 GDB 的进与出 .132.1 调用 GDB .132.1.1 选择文件 .142.1.2 选择模式 .162.1.3 启动期间,GDB 做了什么 .192.2 退出 GDB .202.3 Shell 命令 .212.4 Loging 输出 .213GDB 命令 .223.1 命令语法 .223.2 命令完成 .233.3 获得帮助 .254在 GDB 下运行程序 .294.1 适合调试的编译 .294.2 启动程序 .304.3 程序的参数 .324

2、.4 程序的环境 .324.5 程序的工作目录 .344.6 程序的输入输出 .354.7 调试某个已运行的进程 .364.8 杀掉子进程 .374.9 多线程程序的调试 .374.10 多进程程序的调试 .405.0 停止与继续 .42摘要象 GDB 这样的调试程序,目的就是让你可以查看其它程序的内部运行过程,或者是在它崩溃的那一时刻它在做什么。GDB 能做 4 件事(这些还需附加其他的一些事) ,帮助你捕获在场的错误:启动程序,设定任何可以影响它行为的东西。在特定的条件下使程序停止。当程序停止时,分析发生了什么。改变程序里的一些东西,进行一个由于 bug 所导致的结果的矫正性试验,同时继续

3、了解另外一个 bug。可以使用 GDB 调试用 C 和 C+编写的程序,更多信息参见 支持的语言,及 C 与C+。部分支持 Modula-2,Modula-2 的更多信息参见 Modula-2。在调试使用 sets、subranges 、 file variables 或嵌套函数的 Pascal 程序时,目前不能工作。GDB 不支持 entering expressions、printing values 或者类似特性的 Pascal 语法。GDB 可以调试 Fortran 写的程序,尽管那必然会涉及到带有下划线后缀的一些变量。GDB 可以调试 Objective-C 写的程序,既可以使用 A

4、pple/NeXT 运行时库,也可以使用GNU Objective-C 运行时库。自由软件GDB 是自由软件,受 GNU 公共许可证( GPL)保护。GPL 给予了你自由复制或改编程序的许可就是说获得拷贝的人也就获得了自由修改它的权利(这意味着他们必须有权访问源代码) ,而且可以自由的发布更多的拷贝。大部分软件公司所使用的版权限制了你的自由。自由软件基金会利用 GLP 保护了这些自由。基本上来说,公共许可证是一个说明你拥有这些自由的许可证,而且你不能把这些自由从任何人那里占为己有。自由软件急需自由文档当今的自由软件社区所存在的最大缺憾不在于软件而在于没有我们可以随同自由软件包含在一起的好文档。

5、好多我们十分重要的程序没有一同提供自由的参考指南和介绍性文本。对任何一个软件包来说,文档是最基本的部分。当一个重要的自由软件包没有与一个自由手册或指南一同提供时,那就是一个极大的缺憾。如今,我们拥有太多这样的缺憾了!拿 Perl 来说,人们日常所使用的指导手册就不是免费的。为什么会这样呢?因为这些手册的作者们在发表它们的时候伴有很多限制项目不能复制、不能修改、不能得到源文件把它们从自由软件世界中驱逐出去了。这类的事情已经不只发生过一次了,而且今后还会陆续发生。我们经常听到某位热心的 GNU 用户说他正在编写的一个手册,他打算把它捐献给社区,可没想到他签署了出版合同而使这个手册不自由了,所有的期

6、望全都破灭。自由文档,就像自由软件一样,是自由的,不需要付费的东西。非自由手册的问题不在于发行商为印刷拷贝所要承担的费用只要它本身很好就行(自由软件基金会也出售印刷拷贝) ,而在于这个问题会约束手册的利用。自由手册可以以源代码的方式获得,允许复制与修改。非自由手册是不允许这么做的。自由文档自由度的标准,一般来说与自由软件差不多。再发布(包括很多常规的商业再发布)必须被允许,不管是以在线形式还以书面形式,以便手册可以伴随着程序的每一份拷贝。允许有关技术性方面的内容的更正也是至关重要的。当人们更改软件,添加或改变其某些特性时,如果他们负责任的话,也将会修改相应的手册因而,他们能够为修改过的程序提供

7、准确而清晰的文档。某个手册的页数你是无法决定的,但是为某个程序的变更版本写一份全新的手册,对于我们的社区来说,那真是没有必要。在改进过程中所运用的某些限制是合理的。例如,要求保持原作者的版权通告、发布条款、以及作者名单,是没有问题的。在修正版本中包含是他们更正的通告也是没有问题的。只要论述的是非技术性的话题(就像这一章) ,可以接受连续完整的章节不可删除或被更改。能够接受这些限制,是因为它们不会妨碍社区对手册的正常使用。无论如何,必须允许对手册中所有关技术性方面的内容进行修改,然后通过所有正常的通道,利用所有常规的媒质,发布这个结果。否则,这些限制就妨碍了对手册的使用,那么它就是非自由的了,我

8、们就得需要一个新的手册来代替它了。请散布有关这一论点的言辞。我们的社区仍然在遗失好多手册,这些手册都在成为私有出版物。如果我们趁早散布自由软件急需自由参考手册和指南这样的言辞的话,也许下一个投稿人就会意识到,只有少数的手册投稿给了自由软件社区。如果你正在撰写文档,请坚持在 GNU 的自由文档许可证或其他的自由许可证下出版它。别忘了,这个决策是需要争得你的赞同的你不用理会出版社的决策。只要你坚持,某些出版社会使用自由许可证的,但是他们不能奢求有买卖的特权;那需要由你自己来发行,并且坚定地说:这就是你想要的。如果这个出版社拒绝了你的生意,那就再换一家。如果你不能确定某个被提议的许可证是自由的,就写

9、信给 licensinggnu.org。你可以使用购买的方式来鼓励商业出版社出售更多的免费的,非赢利版权的手册与指南,尤其是购买那些来自于出版社的拷贝,付给他们撰写或作重大改进的费用。同时,尽量完全避免购买非自由的文档。在购买之前,先查看一下发布条款,不管谁要做你的生意都必须尊重你的自由。查看书的历史,设法奖励支付了作者们工资的那些出版社。自由软件基金会在 http:/www.fsf.org/doc/other-free-books.html 维护了一个已经由其他一些出版社出版了的文档的列表。GDB 的贡献者们Richard Stallman 是 GDB 的原作者,也是其他好多 GNU 程序的

10、原作者。好多人已经对它的开发作了贡献。谨以此节来表彰那些主要的贡献者们。自由软件的一个优点就是每个人都无偿的为它作贡献。遗憾的是,我们无法逐一向他们表示感谢。在 GDB 的发布中,有一个“ChangeLog”文件,做了极为详尽的说明。2.0 版本以前的大量变化已湮灭在时间的迷雾中。恳请:极力欢迎对本节的补充。如果您或您的朋友(或者是敌人,为了公平) ,不公平地在这个列表中被遗漏了,我们愿意加入您的名字。为了使那些可能被遗忘的人们的工作不至于徒劳无功,在此特别感谢那些带领 GDB走过各个重要发布版的那些人:Andrew Cagney(发布了 6.1, 6.0, 5.3, 5.2, 5.1 和 5

11、.0 版) ;Jim Blandy(发布了 4.18 版) ;Jason Molenda(发布了 4.17 版) ;Stan Shebs(发布了 4.14版) ;Fred Fish (发布了 4.16,4.15,4.13,4.12,4.11 ,4.10 和 4.9) ;Stu Grossman 和John Gilmore (发布了 4.8,4.7,4.6,4.5 和 4.4 版);John Gilmore(发布了4.3,4.2,4.1,4.0 和 3.9 版) ;Jim Kingdon(发布了 3.5,3.4 和 3.3 版) ;以及 Randy Smith(发布了 3.2,3.1 和 3.0

12、) 。Richard Stallman,在 Peter TerMaat、Chris Hanson、和 Richard Mlynarik 的多次协助下,完成到了 2.8 版的发布。Michael Tiemann 是 GDB 中大部分 GNU C+支持的作者,得益于来自 Per Bothner 和Daniel Berlin 的其他的一些重要贡献。James Clark 编写了 GNU C+反签名编码器(demangler) 。早期在 C+方面的工作是由 Peter TerMaat 做的(他也做了大量的到 3.0 发布版的常规更新工作) 。GDB 是使用 BFD 子程序库来分析多种目标文件格式的,B

13、FD 是 David V. Henkel-Wallace、Rich Pixley、Steve Chamberlain 和 John Gilmore 的一个合作项目。David Johnson 编写了最初的 COFF 支持。Pace Willison 做了最初的压缩的 COFF 支持。哈里斯计算机系统(Harris Computer Systems)的 Brent Benson 贡献了 DWARF 2 的支持。Adam de Boor 和 Bradley Davis 贡献了 ISI Optimum V 的支持。 Per Bothner、Noboyuki Hikichi 和 Alessandro

14、Forin 贡献了 MIPS 的支持。Jean-Daniel Fekete 贡献了 Sun 386i 的支持。Chris Hanson 改良了 HP9000 的支持。Noboyuki Hikichi 和 Tomoyuki Hasei 贡献了Sony/News OS 3 的支持。David Johnson 贡献了 Encore Umax 的支持。Jyrki Kuoppala 贡献了 Altos 3068 的支持。Jeff Law 贡献了 HP PA 和 SOM 的支持。Keith Packard 贡献了NS32k 的支持。 Doug Rabson 贡献了 Acorn Risc Machine 的

15、支持。Bob Rusk 贡献了 Harris Nighthawk CX-UX 的支持。 Chris Smith 贡献了 Convex 的支持(还有 Fortran 的调试) 。Jonathan Stone 贡献了 Pyramid 的支持。Michael Tiemann 贡献了 SPARC 的支持。Tim Tucker 贡献了对 Gould NP1 和 Gould Powernode 的支持。 Pace Willison 贡献了 Intel 386 的支持。Jay Vosburgh 贡献了 Symmetry 的支持。Marko Mlinar 贡献了 OpenRISC 1000 的支持。Andre

16、as Schwab 贡献了 M68k GNU/Linux 的支持。Rich Schaefer 和 Peter Schauer 为支持 SunOS 的共享库提供了帮助。Jay Fenlason 和 Roland McGrath 保证了 GDB 和 GAS 适用于若干机器指令集。Patrick Duval、Ted Goldstein、Vikram Koka 和 Glenn Engel 帮助开发了远程调试。Intel 公司、风河系统(Wind River Systems) 、AMD 、以及 ARM 分别贡献了i960、VxWorks 、A29K UDI 和 RDI targets 的远程调试模块。B

17、rian Fox,readline 库的作者,正在提供命令行编辑与命令历史功能。SUNY Buffalo 的 Andrew Beers 编写了语言切换代码、Modula-2 的支持,并且贡献了此手册的语言一章。Fred Fish 做了支持 Unix System Vr4 的大部分编写工作。他也增强了 command-completion 的支持,使其覆盖到了 C+的过载符号。Hitachi America (现在是 Renesas America), Ltd。负责了对 H8/300、H8/500 和 Super-H处理器的支持。NEC 负责了对 v850、Vr4xxx 和 Vr5xxx 处理器

18、的支持。Mitsubishi(现在是 Renesas)负责了对 D10V、D30V 和 M32R/D 处理器的支持。Toshiba 负责了对 TX39 Mips 处理器的支持。Matsushita 负责了对 MN10200 和 MN10300 处理器的支持。Fujitsu 负责了对 SPARClite 和 FR30 处理器的支持。Kung Hsu、Jeff Law 和 Rick Sladkey 添加了对硬件监视点( hardware watchpoints)的支持。Michael Snyder 添加了对跟踪点(tracepoints)的支持。Stu Grossman 编写了 gdbserver

19、。Jim Kingdon、Peter Schauer、Ian Taylor、及 Stu Grossman,修复了几乎数不清的 bug,并且对整个 GDB 做了清理。惠普公司(Hewlett-Packard Company)的一些人贡献了对 PA-RISC 2.0 体系、HP-UX 10.20、10.30 和 11.0 (窄模式 )、HP 的内核执行线程、HP 的 aC+编译器、以及文本用户界面(旧称终端用户界面)的支持。他们是:Ben Krepp、Richard Title、John Bishop、Susan Macchia、 Kathy Mann、Satish Pai、India Paul、

20、Steve Rehrauer 和 Elena Zannoni。Kim Haase 提供了此手册中的 HP-specific 信息。DJ Delorie 为 DJGPP 项目,把 GDB 移植到了 MS-DOS 上。Robert Hoehne 对 DJGPP的移植作了重大的贡献。Cygnus Solutions 已负责起 GDB 的维护,自 1991 年以来已做了大量的开发工作。Cygnus 为 GDB 做全职工作的工程师有:Mark Alexander、Jim Blandy、 Per Bothner、Kevin Buettner、 Edith Epstein、Chris Faylor、Fred

21、 Fish、Martin Hunt、Jim Ingham、John Gilmore、Stu Grossman、 Kung Hsu、Jim Kingdon、John Metzler、Fernando Nasser、 Geoffrey Noer、Dawn Perchik、Rich Pixley、Zdenek Radouch、Keith Seitz、Stan Shebs、 David Taylor 和 Elena Zannoni. 另外还有: Dave Brolley、Ian Carmichael、Steve Chamberlain、Nick Clifton、 JT Conklin、Stan Cox

22、、DJ Delorie、Ulrich Drepper、Frank Eigler、 Doug Evans、Sean Fagan、David Henkel-Wallace、Richard Henderson、Jeff Holcomb、Jeff Law、Jim Lemke、Tom Lord、Bob Manson、Michael Meissner、Jason Merrill、 Catherine Moore、Drew Moseley、Ken Raeburn、Gavin Romig-Koch、Rob Savoye、Jamie Smith、Mike Stump、Ian Taylor、Angela Thom

23、as、Michael Tiemann、Tom Tromey、Ron Unrau、Jim Wilson 和 David Zuhn,他们做了大大小小不同的贡献。Andrew Cagney、Fernando Nasser 和 Elena Zannoni,他们在 Cygnus Solutions 工作时,实现了最初 GDB/MI 接口。Jim Blandy 添加了预处理宏的支持,那时他在 Red Hat 工作。Andrew Cagney 设计了 GDB 的结构向量。包括 Andrew Cagney、Stephane Carrez、Randolph Chung、Nick Duffek、Richard H

24、enderson、Mark Kettenis、Grace Sainsbury、Kei Sakamoto、 Yoshinori Sato、Michael Snyder、Andreas Schwab、Jason Thorpe、Corinna Vinschen、 Ulrich Weigand 和 Elena Zannoni 的很多人,为把旧有的体系结构移植到这个新的框架上提供了帮助。请发送 FSF 和 GNU 的疑问和问题到 gnugnu.org。这也有一些 其他的方式 联系 FSF。这些页面是由 GDB 的开发者们 维护的。Copyright Free Software Foundation, I

25、nc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.。只要保留这些信息,以任何媒质,一字不差地复制与分者这一整份文章是允许的。本文是由 GDB 的管理员于 2005 年 7 月 16 日,使用 text2html 生成的。1一个简单的 GDB 会话你可以在你的业余时间利用本手册了解有关 GDB 的一切。可是,少数几个命令,就足以开始使用调试器了。本章就阐明了那些命令。GNU m4(一个普通的宏处理器)的一个初级版本表现出下列 bug:有些时候,当我们改变它默认的引证串(quote string,译者注:也就是我们常说的引号)时,用于捕

26、获一个在别处定义的宏的命令停止工作。在下列简短的 m4 会话中,我们定一个可扩展为 0000 的宏;然后我们利用 m4 內建的 defx 定义一个相同的东西 bar。可是当我们把左引证串(open quote string,译者注:英文直译为开引证串)改为,右引证串(close quote string)改为时,相同的程序不能定义新的替代名 baz:$cd gnu/m4$./m4define(foo,0000)foo0000define(bar,defn(foo)bar0000changequote(,)define(baz,defn(foo)bazC-dm4: End of input: 0

27、: fatal error: EOF in string让我们利用 GDB 设法看一下发生了什么事。$gdb m4GDB is free software and you are welcome to distribute copiesof it under certain conditions; type “show copying“ to see the conditions.There is absolutely no warranty for GDB; type “show warranty“for details.GDB 6.3.50.20050716, Copyright 1999

28、 Free Software Foundation, Inc.(gdb)GDB 仅读取足够查找所需的符号数据,余下的按需读取。结果是,第一提示很快就出现了。我们告诉 GDB 使用一个比平常要窄的显示宽度,以使样例与本手册相适应。(gdb)set width 70我们要看一下 m4 內建的 changequote 是如何工作的。通过查看源代码,我们了解到与其相关的子程序是 m4_changequote,因此我们使用 GDB 的 break 命令在那里设置了一个断点。(gdb)break m4_changequoteBreakpoint 1 at 0x62f4: file builtin.c, l

29、ine 879.使用 run 命令,在 GDB 的控制下,我们开始了 m4 的运行。只要控制没有到达m4_changequote 子程序,程序就会像平常那样运行。(gdb)runStarting program: /work/Editorial/gdb/gnu/m4/m4define(foo,0000)foo0000为了引发断点,我们调用 changequote。GDB 暂停执行 m4,显示中断处的上下文信息。changequote(,)Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)at builtin.c:879879 if (bad_

30、argc(TOKEN_DATA_TEXT(argv0),argc,1,3)现在,我们使用命令 n(next)向前执行到当前函数的下一行。(gdb) n882 set_quotes(argc = 2) ? TOKEN_DATA_TEXT(argv1): nil,set_quotes 像是一个有希望的子程序。我们可以使用命令 s(step)代替 next 进入到他的里面。Step 转到任意子程序中要被执行的下一行,因此他进入了 set_quotes。(gdb)sset_quotes (lq=0x34c78 “, rq=0x34c88 “)at input.c:530530 if (lquote !

31、= def_lquote)显示器显示了目前 m4 所停在子程序(还有它的参数)的被调堆栈帧的展示。它显示了一个堆栈的摘要信息。我们可以使用 backtrace 命令(也可以被拼写为 bt),查看总体上我们在堆栈上的位置:Backtrace 显示了每一个活动子程序的堆栈帧。(gdb) bt#0 set_quotes (lq=0x34c78 “, rq=0x34c88 “)at input.c:530#1 0x6344 in m4_changequote (argc=3, argv=0x33c70)at builtin.c:882#2 0x8174 in expand_macro (sym=0x3

32、3320) at macro.c:242#3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)at macro.c:71#4 0x79dc in expand_input () at macro.c:40#5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195我们向前单步调试更多的行,看看都发生了什么。前两次我们使用“s”;后两次为了避免陷入 xstrdup 子程序我们使用“n”。(gdb) s0x3b5c 532 if (rquote != def_rquote)(gdb) s0x3b80 535 lquote = (lq = nil | *lq = 0) ? def_lquote : xstrdup(lq);(gdb) n536 rquote = (rq = nil | *rq = 0) ? def_rquote: xstrdup(rq);(gdb) n538 len_lquote = strlen(rquote);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。