
字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。
字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。
|
GNU Debugger |
|
|---|---|
|
|
| 开发 | GNU计划 |
| 最近版本 | 6.6版 / 2006年12月18日 |
| 类型 | 除错器(Debugger) |
| 许可协议 | GPL |
| 网站 | gnu.org/software/gdb/ |
|
查看 • 讨论 • 编辑 • 历史
|
|
GNU 除错器(GNU Debugger,缩写:GDB),它是GNU 软件系统中的标准除错器,此外GDB也是个具有移携性的除错器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支援除错的编程语言有C、C++、以及FORTRAN。
目录 |
GNU Debugger最初是在1988年由理查德·马修·斯托曼(Richard Stallman,自由软件的精神领袖)所撰写,之后以GNU通用公共许可证(GNU General Public License, GNU GPL)的授权方式将软件释出,因此GNU Debugger是一套自由软件。释出后的1990年—1993年间则由任职于Cygnus Solutions公司的约翰·吉尔摩(John Gilmore)负责后续的软件维护工作。
GDB具备各种除错功效,能针对电脑程式的执行进行追踪与警告,使用GDB的除错人员可以监督及修改程式的内部变量值,甚至监督与修改独立于主程式运作外,以独立个体型态呼用(呼叫使用)的函式。
GDB能为多种不同处理器架构上执行的软件进行除错,这些处理器架构包括:DEC/COMPAQ/HP的Alpha、ARM的ARM、Hitachi的H8/300、IBM的System/370、System 390、Intel的X86及X86-64、IA-64 "Itanium"、Motorola 68000、MIPS的MIPS、HP的PA-RISC、AIM联盟的PowerPC、Hitachi/Renesas/ST的SuperH、Sun的SPARC、DEC/COMPAQ/HP的VAX。
此外一些比较少人知的处理器也一样受GDB支援,包括:AMD的A29K、ARC的ARC、Atmel的AVR、Axis Communications的ETRAX CRIS、D10V、D30V、Fujitsu的FR-30、FR-V、Intel的i960、Renesas的M32R、Motorola的68HC11、Motorola的88000、Freescale的MCORE、MN10200、MN10300、NS32K、Stormy16、V850、以及Zilog的Z8000,此外更后续版本的GDB只会增加更多的处理器支援而不会短少。
GDB的内部已具备了依据各种支援不同处理器的指令集所编译成的模拟推演程式(Simulator),就连大众少知少用的M32R、V850等架构的处理器也都具备。
GDB具有一种“远端,Remote”模式,此种模式多半是在为嵌入式系统进行除错时使用,远端操作指的是:GDB在一部机器内执行,而要进行除错的程式是在另一部机器上执行,接着欲除错的机器上会再加装一个名为“Stub”的小程式,该程式能够与另一端的GDB程式沟通,沟通的路径可以是两部机器间的串接式接线(Serial Cable),也可以是支援TCP/IP协定传输的各种网络,在TCP/IP网络及协定上再加搭传输GDB专有的除错操作用通讯协定,如此便能进行远端除错。
不仅GDB有远端模式,KGDB也同样具有远端模式,KGDB主要是为执行中的Linux核心进行除错,而GDB则是主要是用在原代碼的层次。运用KGDB,负责核心程式的程式设计师可以将核心以近似于应用程式的除错方式来除错,包括为核心程式码设置中断点(breakpoint)、让核心程式以步阶方式逐行执行以及观看变量值等。
在某些架构的处理器中,会以硬件方式提供一些除错功用的寄存器,以及可以设定观察点(Watchpoint),观察点的功用是:当程式设计师指定的内存位址被执行到或訪問到时,观察点即会去触发、触动一个中断点。对此KGDB可以安装在一部传统机器上,并透过远端模式使用另一部受除错机器上的硬件除错功效,同样的两部机器可用各种方式进行沟通,如串接式接线、以太网路等,尤其在FreeBSD操作系统上还允许使用FireWire接线,并用直接內存訪問(Direct Memory Access,DMA)的功效来协助远端除错。
GDB运用上最明显的限制是在“使用者接口”的部分,默認而言只有命令列接口(CLI)可用,而不具备较能亲合上手、直觉操作的图形化使用者接口(GUI),不过此一弱处也已经有几个前端程式为其补强,例如DDD、GDBtk/Insight以及Emacs中的“GUD 模式”等,有了这些补强后,GDB在功效使用的便利性上就能够与“整合发展环境中的除错功效使用”相接近。
另外,有些除错工具(软件)也被设计成能与GDB搭配使用,例如内存泄漏(memory leak)的侦测程式。
gdb prog.out debug prog.out gdb > run run
以下是用GDB进行除错的一段过程示范,欲进行除错的程式已在堆栈追踪(Stack trace)区内:
GNU gdb Red Hat Linux (6.3.0.0-1.21rh) Copyright 2004 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-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /home/sam/programming/crash Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xc11000 This program will demonstrate gdb Program received signal SIGSEGV, Segmentation fault. 0x08048428 in function_2 (x=24) at crash.c:22 22 return *y; (gdb) edit (gdb) shell gcc crash.c -o crash -gstabs+ (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y warning: cannot close "shared object read from target memory": File in wrong format `/home/sam/programming/crash' has changed; re-reading symbols. Starting program: /home/sam/programming/crash Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xa3e000 This program will demonstrate gdb 24 Program exited normally. (gdb) quit
这个程式已处在执行阶段,之后找出这个程式中会导致执行错误的段落,然后将对应处的原代碼用编辑器进行错误修订,更正完成后用GNU 编译器(GCC)重新编译并再次执行。
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History