Debugging with GDB v10.1中文翻译-前言


gdb这类调试器的目的是让您看到程序执行时在“内部”发生了什么——或者程序崩溃时正在做什么。
gdb主要可以做四种事情(以及支持这些事情的其他事情)来帮助您捕捉程序中的bug:

  • 启动您的程序,指定任何可能影响其行为的内容。
  • 让您的程序在指定的条件下停止。
  • 当您的程序停止时,检查发生了什么。
  • 更改程序中的内容,这样您就可以尝试纠正一个bug的影响,并继续研究另一个bug。

可以用gdb来调试C和C++编写的程序。有关更多信息,请参见第217页第15.4节[支持的语言]、第15.4.1节[C和C++]。
部分支持D语言。关于D语言,参见第223页第15.4.2节[D]。
部分支持Modula-2语言。有关Modula-2语言,请参见第227页第15.4.9节[Modula-2语言]。
部分支持OpenCL C语言。有关OpenCL C语言,请参见第225页第15.4.5节[OpenCL C语言]。
gdb目前不能用来调试使用了集合、子范围、文件变量或嵌套函数的Pascal程序。gdb不支持使用Pascal语法输入表达式、打印值或类似功能。
gdb可以用来调试Fortran编写的程序,虽然可能有必要引用一些带有下划线的变量。
gdb可以用来调试Objective-C编写的程序,要么使用Apple/NeXT,要么使用GNU Objective运行时。

自由软件

gdb是自由软件,受gnu通用公共许可证(GPL)保护。GPL给您复制或改编许可程序的自由——但每个获得副本的人也有修改副本的自由(这意味着他们必须可以获得源代码),以及分发更多副本的自由。传统软件公司用版权限制你的自由;自由软件基金会使用通用公共许可证来保护这些自由。
从根本上说,通用公共许可证是一种许可证,它赋予你这些自由,你也不能剥夺任何人的这些自由。

自由软件需要免费文件

当今自由软件社区的最大缺陷不在于软件——而是缺乏好的、能包含在自由软件中的免费文档。许多重要项目都没有免费的参考手册和免费的介绍性文本。文档是任何软件包的重要组成部分;当一个重要的免费软件包没有免费手册和免费教程时,这是一个很大的缺陷。我们今天有许多这样的缺陷。
例如,考虑一下Perl。人们通常使用的教程手册是非免费的。这是怎么发生的?因为这些手册的作者以限制性的条款发布它们——不复制,不修改,源文件不可获取——这将它们排除在自由软件世界之外。
这种事情不是第一次发生了,也远不是最后一次。很多时候,我们听到一个GNU用户急切地描述他正在写一个手册,他对社区的预期贡献,却发现他通过签署一份非免费的出版合同毁掉了一切。
自由文档和自由软件一样,是自由的问题,不是价格的问题。非免费手册的问题不在于出版商对印刷本收费——这本身没问题(自由软件基金会也出售手册的印刷本)。问题是手册的使用限制。免费手册以源代码形式提供,并允许您复制和修改。非免费手册不允许这样。
自由手册的自由标准与自由软件大致相同。必须允许再分发(包括正常类型的商业再分发),以便手册可以伴随程序的每一份拷贝,无论是在线的还是纸质的。
修改技术内容的许可也至关重要。当人们修改软件、添加或更改功能时,如果他们认真的话,他们也会修改手册——这样他们就可以为修改后的程序提供准确清晰的文档。一个让你别无选择只能写一个新的手册来记录程序的一个变更版本的手册,对我们的社区来说是不可用的。
对修改处理方式的某些限制是可以接受的。例如,要求保留原作者的版权声明、发行条款或作者名单是可以的。要求修改后的版本包含已修改的通知也没有问题。即使是不可删除或更改的完整部分也是可以接受的,只要它们涉及非技术主题(比如这个)。这些限制是可以接受的,因为它们不会妨碍社区对手册的正常使用。
但是,必须能够修改手册的所有技术内容,然后通过所有常用渠道,在所有常用媒体上发布结果。否则,限制阻碍了手册的使用,它不是免费的,我们需要另一份手册来代替它。
请传播关于这个问题的消息。我们的社区继续因专有出版而失去手册。如果我们传播自由软件需要免费参考手册和免费教程的信息,也许下一个想通过写文档来贡献的人会意识到,在为时已晚之前,只有免费手册才能为自由软件社区做出贡献。
如果您正在编写文档,请坚持在GNU自由文档许可证或其他自由文档许可证下发布它。记住,这个决定需要你的批准——你不必让出版商决定。如果你坚持的话,一些商业出版商会使用免费许可证,但他们不会提出这个选项;能否解决这个问题取决于你,并坚定地说这是你想要的。如果你正在商议的出版商拒绝,请尝试其他出版商。如果你不确定一个提议的许可是否是免费的,写信给licensing@gnu.org。
你可以通过购买来鼓励商业出版商出售更多免费的、版权所有的手册和教程,特别是通过从为他们的作品或重大改进付费的出版商那里购买副本。同时,尽量避免购买非免费文档。买之前查一个手册的发行条款,坚持无论是谁,找你做生意都要尊重你的自由。查查这本书的历史,尽量奖励已经付费或者付费给作者的出版商来写这本书。
自由软件基金会在http://www.fsf.org/doc/other-free-books.html.维护着一份由其他出版商出版的免费文档列表。

GDB贡献者

理查德·斯托尔曼(Richard Stallman)是GDB和许多其他GNU程序的原始作者。还有许多人对GDB的发展作出了贡献。本节试图对主要贡献者的工作进行说明。自由软件的一个优点是,每个人都可以自由地为它做出贡献;遗憾的是,在这里我们不能对每一个人一一说明。gdb发行版中的文件更改日志(file ChangeLog)详尽记录了每个贡献者的帐号。
版本2.0之前的许多变化都在时间的迷雾中消失了。
恳求:我们非常欢迎对这一部分的补充。如果你或你的朋友(或对手,平心而论)被不公平地从这个名单中删除,我们很乐意添加上你的名字!
为了让他们不至于把自己的很多劳动看做吃力不讨好,我们特别感谢那些带领gdb走过主要发行版的人:AndrewCagney(6.3、6.2、6.1、6.0、5.3、5.2、5.1、5.0版);Jim blandi(4.18版);Jason Molenda(4.17版);stan Shebs(4.14版);弗雷德·菲什(4.16、4.15、4.13、4.12、4.11、4.10和4.9版);斯图·格罗斯曼和约翰·吉尔摩(4.8、4.7、4.6、4.5和4.4版);约翰·吉尔摩(4.3、4.2、4.1、4.0和3.9版);吉姆·金登(3.5、3.4和3.3版);和兰迪·史密斯(3.2、3.1和3.0版)。
理查德·斯托尔曼(Richard Stallman),在彼得·特玛、克里斯·汉森和理查德·姆林纳里克的协助下,在2.8版本中处理发布。迈克尔·蒂曼(Michael Tiemann)是gdb中大多数gnu C++支持包的作者,佩尔·博思纳(Per Bothner)和丹尼尔·柏林(Daniel Berlin)也做出了重要贡献。詹姆斯·克拉克写了gnu C++ demangler。关于C++的早期工作是由彼得·特曼(Peter TerMaat)完成的(他也做了许多导致3.0版本的一般更新工作)。
gdb使用BFD子程序库来检查多种目标文件格式;BFD是大卫五世(David V)的一个联合项目。汉高-华莱士,里奇·皮克斯利,史蒂夫·张伯伦和约翰·吉尔摩。
戴维·约翰逊(David Johnson)编写了COFF原始支持包;佩斯·威廉森( Pace Willison)编写了支持封装的COFF原始支持包。
哈里斯计算机系统公司的布伦特·本森(Brent Benson)为矮人2号(DWARF 2)提供了支持。
亚当·德·布尔(Adam de Boor)和布拉德利·戴维斯(Bradley Davis)为ISI提供了优化版五号支持。佩尔·博思纳、诺博尤基·希基奇和亚历山德罗·福林为MIPS提供了支持。让·丹尼尔为386i提供了支持。克里斯·汉森改进了对HP9000的支持。Noboyuki Hikichi和Tomoyuki Hasei贡献了Sony/News OS 3支持。戴维·约翰逊贡献了Encore Umax支持。Jyrki Kuoppala贡献了Altos 3068支持。杰夫劳贡献了HP PA和SOM支持。Keith Packard贡献了NS32K支持。道格·拉布森贡献了Acorn Risc机器支持。鲍勃鲁斯克贡献了哈里斯夜鹰CX-UX支持。克里斯·史密斯贡献了Convex支持(以及Fortran调试)。乔纳森·斯通为Pyramid提供了支持。迈克尔·蒂曼贡献了SPARC的支持。蒂姆·塔克为Gould NP1和Gould Powernode提供了支持。佩斯·威廉森贡献了英特尔386支持。杰伊·沃斯伯格贡献了Symmetry支持。马尔科·姆利纳贡献了OpenRISC
1000的支持。
Andreas Schwab贡献了M68K gnu/Linux支持。
Rich Schaefer和Peter Schauer帮助支持SunOS共享库。
Jay Fenlason和Roland McGrath确保gdb和GAS就几个机器指令集达成一致。
帕特里克·杜瓦尔、泰德·戈尔茨坦、维克拉姆·科卡和格伦·恩格尔帮助开发了远程调试。英特尔公司、Wind River Systems、AMD公司和ARM公司分别为i960、VxWorks、A29K UDI和RDI目标提供了远程调试模块。
布莱恩·福克斯是提供命令行编辑和命令历史的readline库的作者。
SUNY Buffalo的安德鲁·比尔斯编写了语言转换代码,Modula-2支持,并贡献了本手册的[Languages]章节。
弗雷德·菲什写了对Unix System Vr4的大部分支持。他还增强了命令补全支持,以涵盖C++重载符号。
日立美国有限公司赞助支持了H8/300、H8/500和Super-H处理器。
NEC赞助了对v850、Vr4xxx和Vr5xxx处理器的支持。
三菱(现在的瑞萨)赞助了对D10V、D30V和M32R/D处理器的支持。
东芝赞助了对TX39 Mips处理器的支持。
松下赞助了对MN10200和MN10300处理器的支持。
富士通赞助了对SPARClite和FR30处理器的支持。
龚旭、杰夫·劳和里克·斯莱德基增加了对硬件观察点的支持。
迈克尔·斯奈德增加了对跟踪点的支持。
斯图·格罗斯曼写了gdbserver。
吉姆·金登、彼得·绍尔、伊恩·泰勒和斯图·格罗斯曼在广发银行做了几乎数不清的错误修复和清理。
惠普公司的以下人员为PARISC 2.0架构、惠普-UX 10.20、10.30和11.0(窄模式)、惠普的内核线程实现、惠普的aC++编译器和文本用户界面(nee终端用户界面)提供了支持:本·克瑞普、理查德·蒂尔、约翰·毕晓普、苏珊·麦克基亚、凯西·曼、萨蒂什·派(Satish Pai)、印度·保罗(India Paul)、史蒂夫·雷罗(Steve
Rehrauer)和埃琳娜·赞诺尼(Elena Zannoni)。金·哈斯在本手册中提供了惠普的具体信息。
DJ Delorie为了DJGPP项目,把gdb移植到了MS-DOS。罗伯特·霍纳对DJGPP港口做出了重大贡献。
自1991年以来,天鹅座解决方案一直赞助广发银行的维护和大部分开发工作。曾在gdb全职工作的天鹅座工程师包括马克·亚历山大、吉姆·布兰迪、佩尔·博思纳、凯文·布特纳、伊迪丝·爱泼斯坦、克里斯·费勒、弗雷德·菲什、马丁·亨特、吉姆·英厄姆、约翰·吉尔摩、斯图·格罗斯曼、孔旭、吉姆·金登、约翰·梅兹勒、费尔南多·纳赛尔、杰弗里·诺尔、道恩·佩尔奇克、里奇·皮克利、兹德内克·拉杜什、基思·塞茨、斯坦·希布斯、大卫·泰勒和埃琳娜·赞诺尼。此外,戴夫·布洛伊,伊恩·卡迈克尔,史蒂夫·张伯伦,尼克·克利夫顿,JT·康克林,斯坦·考克斯,DJ德洛里,乌尔里希·德雷珀,弗兰克
艾格勒、道格·埃文斯、肖恩·法甘、大卫·汉高-华莱士、理查德·亨德森、杰夫·霍尔科姆、杰夫·劳、吉姆·莱姆克、汤姆·洛德、鲍勃·曼森、迈克尔·迈斯纳、杰森·梅里尔、凯瑟琳·摩尔、德鲁·莫斯利、肯·雷伯恩、加文·罗米格-科赫、罗布·萨沃伊、杰·史密斯、迈克·斯坦普、伊恩·泰勒、安吉拉·托马斯、迈克尔·蒂曼、汤姆·特罗梅、罗恩·阿夸、吉姆·威尔逊和大卫·祖恩都做出了或大或小的贡献。
安德鲁·卡尼(Andrew Cagney)、费尔南多·纳赛尔(Fernando Nasser)和埃琳娜·赞诺尼(Elena Zannoni)在为天鹅座解决方案(Cygnus Solutions)工作时,实现了最初的gdb/mi接口。
吉姆·布兰迪在为红帽工作时,增加了对预处理器宏的支持。
Andrew Cagney设计了gdb的架构矢量。许多人,包括安德鲁·卡尼、夏羽·卡雷兹、伦道夫·钟、尼克·达菲克、理查德·亨德森、马克·凯特尼斯、格蕾丝·塞恩斯伯里、坂本庆司、佐藤良纪、迈克尔·斯奈德、安德烈亚斯·施瓦布、杰森·索普、科琳娜·温申恩、乌尔里希·韦根和埃琳娜·赞诺尼,帮助旧建筑迁移到这个新框架。
安德鲁·卡格尼(Andrew Cagney)完全重新设计并重新实现了广发银行的unwinder框架,这包括一个全新的设计,具有框架标识、独立的框架嗅探器和哨兵框架。马克·凯特尼斯实现了矮人2开卷机,杰夫·约翰斯顿实现了lib under开卷机,安德鲁·卡格尼实现了假人、哨兵、流浪汉和trad开卷机。具体到架构的改变,每个都涉及架构框架代码的完全重写,由吉姆·布兰迪、乔尔·布罗贝克尔、凯文·布埃特纳、安德鲁·卡尼、夏羽·卡雷兹、伦道夫·钟、奥尔扬·弗里堡、理查德·亨德森、丹尼尔·雅各布维茨、杰夫·约翰斯顿、马克·凯特尼斯、西奥多·阿。罗斯、坂本祺、佐藤良纪、迈克尔·斯奈德、科琳娜·文森和乌尔里希·韦根。
来自张力卡公司的克里斯蒂安·赞克尔、罗斯·莫利、鲍勃·威尔逊和马克西姆·格里戈列夫。为Xtensa处理器提供支持。其他在gdb Xtensa港口工作过的人包括史蒂夫Tjiang、约翰·纽林和斯科特·弗纳。
迈克尔·阿奇和西林公司的员工。对Xilinx MicroBlaze架构提供支持。e.
对FreeBSD/mips目标和本地配置的最初支持是由SRI国际公司和剑桥大学计算机实验室根据美国国防高级研究计划局/AFRL合同FA8750-10-C-0237(“CTSRD”)开发的,作为美国国防高级研究计划局CRASH研究计划的一部分。
作为DARPA SSITH研究计划的一部分,SRI国际公司和剑桥大学计算机实验室(计算机科学与技术系)根据DARPA合同HR0011-18-C-0016(“ECATS”)开发了对FreeBSD/riscv目标和本机配置的初始支持。
OpenRISC 1000的原始端口被认为是由于亚历山德罗·福林和佩尔·博思纳。最近的港口是杰里米·贝内特、弗兰克·朱利恩、斯特凡·沃林托维茨和斯塔福德·霍恩的作品。
潘伟民,David Faust,Jose E.Marchesi为Linux内核BPF虚拟架构提供了支持。这项工作是甲骨文赞助的。

posted @ 2021-03-09 18:08  墨飞飞  阅读(906)  评论(0编辑  收藏  举报