Name
gdb - The GNU Debugger
概要
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调试用C,C @ t {++},Fortran和Modula-2编写的程序。
用shell命令"gdb"调用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命令:
- 在函数处设置断点(在文件中)
(gdb) break [file:]functiop
- 启动程序(使用arglist,如果已指定)
(gdb) run [arglist] //r
- 显示程序堆栈
(gdb) bt //Backtrace
- 显示表达式的值
(gdb) print expr //p
- 继续运行程序(停止后,例如在断点处)
(gdb) c
(gdb) continue
- 执行下一个程序行(停止后); 单步执行该行中的所有函数调用
(gdb) next
(gdb) n
- 看一下当前停止的程序行
(gdb) edit [file:]function
- 在程序当前停止的位置附近键入程序的文本
(gdb) list [file:]function
- 执行下一个程序行(停止后); 进入该行中的任何函数调用
(gdb) step
- 显示有关GDB命令名称的信息,或有关使用GDB的常规信息
(gdb) help [name]
- 退出GDB
(gdb) quit
有关GDB的完整详细信息,请参阅Richard M. Stallman和Roland H. Pesch撰写的《使用GDB:GNU源代码级调试器指南》。
可以在线获取与“ info”程序中“ gdb”条目相同的文本。
选项
选项以外的任何参数都指定可执行文件和核心文件(或进程ID);
也就是说,遇到的第一个参数没有关联的选项标志时,它等效于-se选项,第二个参数(如果有)等效于-c选项(如果它是文件名)。 许多选择都有长短形式。 两者都显示在这里。 如果您截断了长格式,则只要它们足够明确,就可以识别它们。 (如果愿意,可以用+而不是-标记选项参数,尽管我们说明了更常用的约定。)
您提供的所有选项和命令行参数均按顺序处理。 使用-x选项时,顺序会有所不同。
-help
-h 列出所有选项,并简要说明。
-symbols=file
-s file 从文件文件中读取符号表。
-write 允许写入可执行文件和核心文件。
-exec=file
-e 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 "Quiet". 不要打印介绍性和版权信息。 这些消息在批处理模式下也被禁止
-batch 以批处理模式运行。 处理完-x(和.gdbinit,如果未禁止)指定的所有命令文件后,以状态0退
出。 如果在执行命令文件中的GDB命令时发生错误,则以非零状态退出。
批处理模式对于将GDB用作过滤器可能很有用,例如在另一台计算机上下载并运行程序。 为了使
其更有用,消息程序正常退出。
(通常在GDB控制下运行的程序终止时发出) 在批处理模式下运行时不会发出。
-cd=directory 使用directory作为其工作目录而不是当前目录运行GDB。
-fullname
-f Emacs在将GDB作为子进程运行时设置此选项。 它告诉GDB每次显示堆栈帧时(包括程序每次停止)
以标准的,可识别的方式输出完整的文件名和行号。
这种可识别的格式看起来像两个\032字符,然后是文件名,行号和字符位置(以冒号分隔)和换行
符。 Emacs到GDB的接口程序使用两个\ 032字符作为信号来显示框架的源代码。
-b bps 设置GDB用于远程调试的任何串行接口的线速度(波特率或每秒比特数).
-tty=device 使用设备运行程序的标准输入和输出。
参看
GDB的完整文档保留为Texinfo手册。 如果在您的站点上正确安装了“ info”和“ gdb”程序以及GDB的Texinfo文档,则该命令
# info gdb
# man gdb
应该让您访问完整的手册.