second round of proofread

This commit is contained in:
Dongliang Mu 2017-09-21 17:36:41 -04:00
parent 154caf4f32
commit edb0979702

View File

@ -35,7 +35,7 @@
## break ## break
使用 `break` 命令(缩写 `b`)来设置断点。 详见[官方文档][1]。 使用 `break` 命令(缩写 `b`)来设置断点。
- `break` 当不带参数时,在所选栈帧中执行的下一条指令处设置断点。 - `break` 当不带参数时,在所选栈帧中执行的下一条指令处设置断点。
- `break <function-name>` 在函数体入口处打断点,在 C++ 中可以使用 `class::function``function(type, ...)` 格式来指定函数名。 - `break <function-name>` 在函数体入口处打断点,在 C++ 中可以使用 `class::function``function(type, ...)` 格式来指定函数名。
@ -46,6 +46,8 @@
- `break <address>` 在程序指令的地址处打断点。 - `break <address>` 在程序指令的地址处打断点。
- `break ... if <cond>` 设置条件断点,`...` 代表上述参数之一(或无参数),`cond` 为条件表达式,仅在 `cond` 值非零时暂停程序执行。 - `break ... if <cond>` 设置条件断点,`...` 代表上述参数之一(或无参数),`cond` 为条件表达式,仅在 `cond` 值非零时暂停程序执行。
详见[官方文档][1]。
## info breakpoints ## info breakpoints
查看断点,观察点和捕获点的列表。用法: 查看断点,观察点和捕获点的列表。用法:
@ -55,18 +57,18 @@
## disable ## disable
禁用一些断点。 详见[官方文档][2]。 禁用一些断点。参数是用空格分隔的断点编号。要禁用所有断点,不加参数。
参数是用空格分隔的断点编号。
要禁用所有断点,不加参数。
禁用的断点不会被忘记,但直到重新启用才有效。 禁用的断点不会被忘记,但直到重新启用才有效。
用法: `disable [breakpoints] [list…]` 用法: `disable [breakpoints] [list…]`
`breakpoints``disable` 的子命令(可省略),`list…` 同 `info breakpoints` 中的描述。 `breakpoints``disable` 的子命令(可省略),`list…` 同 `info breakpoints` 中的描述。
详见[官方文档][2]。
## enable ## enable
启用一些断点。 详见[官方文档][2]。 启用一些断点。给出断点编号(以空格分隔)作为参数。没有参数时,所有断点被启用。
给出断点编号(以空格分隔)作为参数。
没有参数时,所有断点被启用。
- `enable [breakpoints] [list…]` 启用指定的断点(或所有定义的断点)。 - `enable [breakpoints] [list…]` 启用指定的断点(或所有定义的断点)。
- `enable [breakpoints] once list…` 临时启用指定的断点。GDB 在停止您的程序后立即禁用这些断点。 - `enable [breakpoints] once list…` 临时启用指定的断点。GDB 在停止您的程序后立即禁用这些断点。
@ -74,92 +76,125 @@
`breakpoints``disable` 中的描述。 `breakpoints``disable` 中的描述。
详见[官方文档][2]。
## clear ## clear
在指定行或函数处清除断点。 详见[官方文档][3]。 在指定行或函数处清除断点。参数可以是行号,函数名称或 `*` 跟一个地址。
参数可以是行号,函数名称或 `*` 跟一个地址。
- `clear` 当不带参数时,清除所选栈帧在执行的源码行中的所有断点。 - `clear` 当不带参数时,清除所选栈帧在执行的源码行中的所有断点。
- `clear <function>`, `clear <filename:function>` 删除在命名函数的入口处设置的任何断点。 - `clear <function>`, `clear <filename:function>` 删除在命名函数的入口处设置的任何断点。
- `clear <linenum>`, `clear <filename:linenum>` 删除在指定的文件指定的行号的代码中设置的任何断点。 - `clear <linenum>`, `clear <filename:linenum>` 删除在指定的文件指定的行号的代码中设置的任何断点。
- `clear <address>` 清除指定程序指令的地址处的断点。 - `clear <address>` 清除指定程序指令的地址处的断点。
详见[官方文档][3]。
## delete ## delete
删除一些断点或自动显示表达式。 详见[官方文档][3]。 删除一些断点或自动显示表达式。参数是用空格分隔的断点编号。要删除所有断点,不加参数。
参数是用空格分隔的断点编号。
要删除所有断点,不加参数。
用法: `delete [breakpoints] [list…]` 用法: `delete [breakpoints] [list…]`
详见[官方文档][3]。
## tbreak ## tbreak
设置临时断点。参数形式同 `break` 一样。详见[官方文档][1]。 设置临时断点。参数形式同 `break` 一样。
除了断点是临时的之外,其他同 `break` 一样,所以在命中时会被删除。 除了断点是临时的之外,其他同 `break` 一样,所以在命中时会被删除。
详见[官方文档][1]。
## watch ## watch
为表达式设置观察点。详见[官方文档][4]。 为表达式设置观察点。
用法: `watch [-l|-location] <expr>` 用法: `watch [-l|-location] <expr>`
每当一个表达式的值改变时,观察点就会暂停程序执行。 每当一个表达式的值改变时,观察点就会暂停程序执行。
如果给出了 `-l` 或者 `-location`,则它会对 `expr` 求值并观察它所指向的内存。 如果给出了 `-l` 或者 `-location`,则它会对 `expr` 求值并观察它所指向的内存。
例如,`watch *(int *)0x12345678` 将在指定的地址处观察一个 4 字节的区域(假设 int 占用 4 个字节)。 例如,`watch *(int *)0x12345678` 将在指定的地址处观察一个 4 字节的区域(假设 int 占用 4 个字节)。
详见[官方文档][4]。
## step ## step
单步执行程序,直到到达不同的源码行。 详见[官方文档][5]。 单步执行程序,直到到达不同的源码行。
用法: `step [N]` 用法: `step [N]`
参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。 参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。
警告:如果当控制在没有调试信息的情况下编译的函数中使用 `step` 命令,则执行将继续进行,直到控制到达具有调试信息的函数。 同样,它不会进入没有调试信息编译的函数。 警告:如果当控制在没有调试信息的情况下编译的函数中使用 `step` 命令,则执行将继续进行,直到控制到达具有调试信息的函数。 同样,它不会进入没有调试信息编译的函数。
要执行没有调试信息的函数,请使用 `stepi` 命令,详见后文。 要执行没有调试信息的函数,请使用 `stepi` 命令,详见后文。
详见[官方文档][5]。
## reverse-step ## reverse-step
反向单步执行程序,直到到达另一个源码行的开头。 详见[官方文档][6]。 反向单步执行程序,直到到达另一个源码行的开头。
用法: `reverse-step [N]` 用法: `reverse-step [N]`
参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。 参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。
详见[官方文档][6]。
## next ## next
单步执行程序,执行完子程序调用。 详见[官方文档][5]。 单步执行程序,执行完子程序调用。
用法: `next [N]` 用法: `next [N]`
`step` 不同,如果当前的源代码行调用子程序,则此命令不会进入子程序,而是将其视为单个源代码行,继续执行。 `step` 不同,如果当前的源代码行调用子程序,则此命令不会进入子程序,而是将其视为单个源代码行,继续执行。
详见[官方文档][5]。
## reverse-next ## reverse-next
反向步进程序,执行完子程序调用。 详见[官方文档][6]。 反向步进程序,执行完子程序调用。
用法: `reverse-next [N]` 用法: `reverse-next [N]`
如果要执行的源代码行调用子程序,则此命令不会进入子程序,调用被视为一个指令。 如果要执行的源代码行调用子程序,则此命令不会进入子程序,调用被视为一个指令。
参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。 参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。
详见[官方文档][6]。
## return ## return
您可以使用 `return` 命令取消函数调用的执行。 详见[官方文档][7]。 您可以使用 `return` 命令取消函数调用的执行。
如果你给出一个表达式参数,它的值被用作函数的返回值。 如果你给出一个表达式参数,它的值被用作函数的返回值。
`return <expression>``expression` 的值作为函数的返回值并使函数直接返回。 `return <expression>``expression` 的值作为函数的返回值并使函数直接返回。
详见[官方文档][7]。
## finish ## finish
执行直到选定的栈帧返回。 详见[官方文档][5]。 执行直到选定的栈帧返回。
用法: `finish` 用法: `finish`
返回后,返回的值将被打印并放入到值历史记录中。 返回后,返回的值将被打印并放入到值历史记录中。
详见[官方文档][5]。
## until ## until
执行直到程序到达当前栈帧中当前行之后(与 [break](#break) 命令相同的参数)的源码行。 详见[官方文档][5]。 执行直到程序到达当前栈帧中当前行之后(与 [break](#break) 命令相同的参数)的源码行。
此命令用于通过一个多次的循环,以避免单步执行。 此命令用于通过一个多次的循环,以避免单步执行。
`until <location>``u <location>` 继续运行程序,直到达到指定的位置,或者当前栈帧返回。 `until <location>``u <location>` 继续运行程序,直到达到指定的位置,或者当前栈帧返回。
详见[官方文档][5]。
## continue ## continue
在信号或断点之后,继续运行被调试的程序。 详见[官方文档][5]。 在信号或断点之后,继续运行被调试的程序。
用法: `continue [N]` 用法: `continue [N]`
如果从断点开始,可以使用数字 `N` 作为参数,这意味着将该断点的忽略计数设置为 `N - 1`(以便断点在第 N 次到达之前不会中断)。 如果从断点开始,可以使用数字 `N` 作为参数,这意味着将该断点的忽略计数设置为 `N - 1`(以便断点在第 N 次到达之前不会中断)。
如果启用了非停止模式(使用 `show non-stop` 查看),则仅继续当前线程,否则程序中的所有线程都将继续。 如果启用了非停止模式(使用 `show non-stop` 查看),则仅继续当前线程,否则程序中的所有线程都将继续。
详见[官方文档][5]。
## print ## print
求值并打印表达式 EXP 的值。 详见[官方文档][8]。 求值并打印表达式 EXP 的值。
可访问的变量是所选栈帧的词法环境,以及范围为全局或整个文件的所有变量。 可访问的变量是所选栈帧的词法环境,以及范围为全局或整个文件的所有变量。
用法: `print [expr]``print /f [expr]` 用法: `print [expr]``print /f [expr]`
`expr` 是一个(在源代码语言中的)表达式。 `expr` 是一个(在源代码语言中的)表达式。
默认情况下,`expr` 的值以适合其数据类型的格式打印;您可以通过指定 `/f` 来选择不同的格式,其中 `f` 是一个指定格式的字母;详见[输出格式][9]。 默认情况下,`expr` 的值以适合其数据类型的格式打印;您可以通过指定 `/f` 来选择不同的格式,其中 `f` 是一个指定格式的字母;详见[输出格式][9]。
@ -167,9 +202,12 @@
要以每行一个成员带缩进的格式打印结构体变量请使用命令 `set print pretty on`,取消则使用命令 `set print pretty off` 要以每行一个成员带缩进的格式打印结构体变量请使用命令 `set print pretty on`,取消则使用命令 `set print pretty off`
可使用命令 `show print` 查看所有打印的设置。 可使用命令 `show print` 查看所有打印的设置。
详见[官方文档][8]。
## x ## x
检查内存。 详见[官方文档][10]。 检查内存。
用法: `x/nfu <addr>``x <addr>` 用法: `x/nfu <addr>``x <addr>`
`n`, `f`, 和 `u` 都是可选参数,用于指定要显示的内存以及如何格式化。 `n`, `f`, 和 `u` 都是可选参数,用于指定要显示的内存以及如何格式化。
`addr` 是要开始显示内存的地址的表达式。 `addr` 是要开始显示内存的地址的表达式。
@ -180,13 +218,18 @@
`x/3uh 0x54320` 表示从地址 0x54320 开始以无符号十进制整数的格式,双字节为单位来显示 3 个内存值。 `x/3uh 0x54320` 表示从地址 0x54320 开始以无符号十进制整数的格式,双字节为单位来显示 3 个内存值。
`x/16xb 0x7f95b7d18870` 表示从地址 0x7f95b7d18870 开始以十六进制整数的格式,单字节为单位显示 16 个内存值。 `x/16xb 0x7f95b7d18870` 表示从地址 0x7f95b7d18870 开始以十六进制整数的格式,单字节为单位显示 16 个内存值。
详见[官方文档][10]。
## display ## display
每次程序暂停时,打印表达式 EXP 的值。 详见[官方文档][11]。 每次程序暂停时,打印表达式 EXP 的值。
用法: `display <expr>`, `display/fmt <expr>``display/fmt <addr>` 用法: `display <expr>`, `display/fmt <expr>``display/fmt <addr>`
`fmt` 用于指定显示格式。像 [print](#print) 命令里的 `/f` 一样。 `fmt` 用于指定显示格式。像 [print](#print) 命令里的 `/f` 一样。
对于格式 `i``s`,或者包括单位大小或单位数量,将表达式 `addr` 添加为每次程序停止时要检查的内存地址。 对于格式 `i``s`,或者包括单位大小或单位数量,将表达式 `addr` 添加为每次程序停止时要检查的内存地址。
详见[官方文档][11]。
## info display ## info display
打印自动显示的表达式列表,每个表达式都带有项目编号,但不显示其值。 打印自动显示的表达式列表,每个表达式都带有项目编号,但不显示其值。
@ -214,23 +257,29 @@
## help ## help
打印命令列表。 详见[官方文档][12]。 打印命令列表。
您可以使用不带参数的 `help`(缩写为 `h`)来显示命令的类别名的简短列表。 您可以使用不带参数的 `help`(缩写为 `h`)来显示命令的类别名的简短列表。
使用 `help <class>` 您可以获取该类中的各个命令的列表。 使用 `help <class>` 您可以获取该类中的各个命令的列表。
使用 `help <command>` 显示如何使用该命令。 使用 `help <command>` 显示如何使用该命令。
详见[官方文档][12]。
## attach ## attach
挂接到 GDB 之外的进程或文件。 详见[官方文档][13]。 挂接到 GDB 之外的进程或文件。
该命令可以将进程 ID 或设备文件作为参数。 该命令可以将进程 ID 或设备文件作为参数。
对于进程 ID您必须具有向进程发送信号的权限并且必须具有与调试器相同的有效的 uid。 对于进程 ID您必须具有向进程发送信号的权限并且必须具有与调试器相同的有效的 uid。
用法: `attach <process-id>` 用法: `attach <process-id>`
GDB 在安排调试指定的进程之后做的第一件事是暂停该进程。 GDB 在安排调试指定的进程之后做的第一件事是暂停该进程。
无论是通过 `attach` 命令挂接的进程还是通过 `run` 命令启动的进程,您都可以使用的 GDB 命令来检查和修改挂接的进程。 无论是通过 `attach` 命令挂接的进程还是通过 `run` 命令启动的进程,您都可以使用的 GDB 命令来检查和修改挂接的进程。
详见[官方文档][13]。
## run ## run
启动被调试的程序。 详见[官方文档][14]。 启动被调试的程序。
可以直接指定参数,也可以用 [set args][15] 设置(启动所需的)参数。 可以直接指定参数,也可以用 [set args][15] 设置(启动所需的)参数。
例如: `run arg1 arg2 ...` 等效于 例如: `run arg1 arg2 ...` 等效于
@ -241,9 +290,11 @@ run
还允许使用 `>`, `<`, 或 `>>` 进行输入和输出重定向。 还允许使用 `>`, `<`, 或 `>>` 进行输入和输出重定向。
详见[官方文档][14]。
## backtrace ## backtrace
打印整体栈帧信息。 详见[官方文档][16]。 打印整体栈帧信息。
- `bt` 打印整体栈帧信息,每个栈帧一行。 - `bt` 打印整体栈帧信息,每个栈帧一行。
- `bt n` 类似于上,但只打印最内层的 n 个栈帧。 - `bt n` 类似于上,但只打印最内层的 n 个栈帧。
@ -264,9 +315,12 @@ run
#7 0x08054168 in main (argc=4, argv=0xbf8333e4) at vswitchd/ovs-vswitchd.c:125 #7 0x08054168 in main (argc=4, argv=0xbf8333e4) at vswitchd/ovs-vswitchd.c:125
``` ```
详见[官方文档][16]。
## ptype ## ptype
打印类型 TYPE 的定义。 详见[官方文档][17]。 打印类型 TYPE 的定义。
用法: `ptype[/FLAGS] TYPE-NAME | EXPRESSION` 用法: `ptype[/FLAGS] TYPE-NAME | EXPRESSION`
参数可以是由 `typedef` 定义的类型名, 或者 `struct STRUCT-TAG` 或者 `class CLASS-NAME` 或者 `union UNION-TAG` 或者 `enum ENUM-TAG` 参数可以是由 `typedef` 定义的类型名, 或者 `struct STRUCT-TAG` 或者 `class CLASS-NAME` 或者 `union UNION-TAG` 或者 `enum ENUM-TAG`
根据所选的栈帧的词法上下文来查找该名字。 根据所选的栈帧的词法上下文来查找该名字。
@ -310,7 +364,7 @@ type = real_t *
type = double * type = double *
``` ```
详见[官方文档][17]。
------ ------