gdb - GNU 调试器
gdb [-help] [-nh] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-p procID] [-x cmds] [-d dir] [prog|prog procID|prog core]
诸如 GDB 之类的调试器的目的是让您看到另一个程序在执行时“内部”发生了什么——或者另一个程序在它崩溃时正在做什么。
GDB 可以做四种主要的事情(加上其他支持这些事情的事情)来帮助您捕获行为中的错误:
· 启动您的程序,指定可能影响其行为的任何内容。
· 让你的程序在特定条件下停止。
· 检查程序停止时发生了什么。
· 更改程序中的内容,以便您可以尝试纠正一个错误的影响并继续了解另一个错误。
您可以使用 GDB 调试用 C、C@t{++}、Fortran 和 Modula-2 编写的程序。
GDB 使用 shell 命令“gdb”调用。一旦启动,它会从终端读取命令,直到您使用 GDB 命令“quit”告诉它退出。您可以使用“help”命令从 GDB 本身获得在线帮助。
您可以不带参数或选项运行“gdb”;但是启动 GDB 最常用的方法是使用一个或两个参数,指定一个可执行程序作为参数:
gdb program
您还可以从指定的可执行程序和核心文件开始:
gdb program core
如果要调试正在运行的进程,则可以改为指定进程 ID 作为第二个参数:
gdb program 1234
gdb -p 1234
会将 GDB 附加到进程 1234(除非您还有一个名为 1234 的文件;GDB 确实会首先检查核心文件)。使用选项 -p 您可以省略程序文件名。
以下是一些最常用的 GDB 命令:
break [file:]functiop //在函数处设置断点(在文件中)。
run [arglist] //启动您的程序(使用 arglist,如果指定)。
bt //Backtrace:显示程序堆栈。
print expr //显示表达式的值。
c //继续运行您的程序(停止后,例如在断点处)。
next //执行下一个程序行(停止后);跳过该行中的任何函数调用。
edit [file:]function //查看当前停止的程序行。
list [file:]function //在当前停止的位置附近键入程序的文本。
step //执行下一行(停止后);进入该行中的任何函数调用。
help [name] //显示有关 GDB 命令名称的信息,或有关使用 GDB 的一般信息。
quit //退出 GDB。
有关 GDB 的完整详细信息,请参阅 Richard M. Stallman 和 Roland H. Pesch 所著的 Using GDB: A Guide to the GNU Source-Level Debugger。与“info”程序中的“gdb”条目相同的文本可在线获得。
除选项之外的任何参数都指定可执行文件和核心文件(或进程 ID); 也就是说,遇到没有关联选项标志的第一个参数等价于 -se 选项,第二个(如果有)如果是文件名,则等价于 -c 选项。 许多选项都有全称和简写两种形式; 两者都显示在这里。 如果您截断全称,只要存在足够多的选项以明确无误,它们也会被识别。 (如果您愿意,可以使用 + 而不是 - 标记选项参数,尽管我们说明了更常见的约定。)
您提供的所有选项和命令行参数都按顺序处理。使用 -x 选项时,顺序会有所不同。
-help
-h //列出所有选项,并附上简要说明。
-symbols=file
-s file //从文件文件中读取符号表。
-write //启用写入可执行文件和核心文件。
-exec=file
-e file //使用文件 file 作为可执行文件在适当的时候执行,并结合核心转储检查纯数据。
-se=file //从文件文件中读取符号表并将其用作可执行文件。
-core=file
-c file //使用文件文件作为核心转储来检查。
-command=file
-x file //从文件 file 执行 GDB 命令。
-ex command //执行给定的 GDB 命令。
-directory=directory
-d directory //将目录添加到路径以搜索源文件。
-nh //不执行来自 ~/.gdbinit 的命令。
-nx
-n //不执行来自任何 .gdbinit 初始化文件的命令。
-quiet
-q //“安静”。不要打印介绍性和版权信息。这些消息也在批处理模式下被抑制。
-batch //以批处理模式运行。 在处理了所有用 -x 指定的命令文件(和 .gdbinit,如果没有被禁止)后,以状态 0 退出。 如果在执行命令文件中的 GDB 命令时发生错误,则以非零状态退出。 批处理模式可能有助于将 GDB 作为过滤器运行,例如在另一台计算机上下载和运行程序; 为了使它更有用,消息程序正常退出。 (通常在 GDB 控制下运行的程序终止时发出)在批处理模式下运行时不会发出。
-cd=directory //使用目录作为其工作目录运行 GDB,而不是当前目录。
-fullname
-f //Emacs 在将 GDB 作为子进程运行时设置此选项。 它告诉 GDB 以标准的、可识别的方式在每次显示堆栈帧时(包括每次程序停止时)输出完整的文件名和行号。 这种可识别的格式看起来像两个字符,后跟文件名、行号和用冒号分隔的字符位置,以及一个换行符。 Emacs-to-GDB 接口程序使用两个字符作为信号来显示框架的源代码。
-b bps //设置 GDB 用于远程调试的任何串行接口的线速度(波特率或每秒位数)。
-tty=device //使用device运行程序的标准输入和输出。
也可以看看
GDB 的完整文档作为 Texinfo 手册进行维护。如果“info”和“gdb”程序和 GDB 的 Texinfo 文档正确安装在您的站点,命令
info gdb
应该让您访问完整的手册。
使用 GDB:<A Guide to the GNU Source-Level Debugger> GNU 源代码级调试器指南,Richard M. Stallman 和 Roland H. Pesch,1991 年 7 月。
版权所有 © 1988-2013 Free Software Foundation, Inc.
根据 GNU 自由文档许可证 1.3 版或自由软件基金会发布的任何更高版本的条款,允许复制、分发和/或修改本文档; 不变部分是“自由软件”和“自由软件需要免费文档”,封面文本是“A GNU 手册”,封底文本如下 (a) 所示。
(a) FSF 的封底文字是:“您可以自由复制和修改本 GNU 手册。从 GNU Press 购买副本支持 FSF 开发 GNU 和促进软件自由。”