GDB 常用命令
GDB 常用命令
原文为《计算机系统基础》附录C,ISBN 号为 978-7-111-60489-1
GDB 是一个程序调试工具软件,GDB 具有类似 shell 的命令补全功能。
启动 GDB
在 shell 命令行中输入 gdb 命令启动 GDB 程序,比如假设 shell 提示符为 $:
$ gdb [可执行文件名]
该命令用于启动 GDB 并同时加载指定的将要被调试的可执行文件,如果仅输入 gdb,而没有给定可执行文件,则仅启动 GDB 程序,因此需要在 GDB 环境中使用命令加载需要调试的可执行文件。
一旦启动 GDB 程序,则调试过程就在 GDB 调试环境中进行。
GDB 常用命令
在 GDB 调试环境中,大部分 GDB 命令可以利用补全功能以简写方式输入,比如 quit 可以写为 q,因为在 GDB 中,以 q 开头的命令只有 quit;list 可以简写为 l;此外,按下回车键,会重复上一个命令。
在 GDB 调试环境下使用的 GDB 命令有很多,下面是常用的几个:
-
help [命令名]如果想了解某个
GDB命令的用法,可以使用help命令,比如列出list命令的使用方法:(gdb) help list List specified function or line. With no argument, lists ten more lines after or around previous listing. "list -" lists the ten lines before a previous ten-line listing. One argument specifies a line, and ten lines are listed around that line. Two arguments with comma between specify starting and ending lines to list. Lines can be specified in these ways: LINENUM, to list around that line in current file, FILE:LINENUM, to list around that line in that file, FUNCTION, to list around beginning of that function, FILE:FUNCTION, to distinguish among like-named static functions. *ADDRESS, to list around the line containing that address. With two args, if one is empty, it stands for ten lines away from the other arg. By default, when a single location is given, display ten lines. This can be changed using "set listsize", and the current value can be shown using "show listsize". -
file <可执行文件>如果在启动
GDB程序时忘了加可执行文件名,那么在调试环境下,可以使用file命令指定需要加载并调试的可执行文件。比如:(gdb) file ./a.out将加载当前目录下的
a.out文件。 -
run [参数列表]run命令用来启动并运行已经加载的被调试程序,如果被调试程序需要参数,则在run后面跟着输入参数列表,参数之间使用空格做间隔。 -
list [显示对象]list程序用来显示一段源程序代码,在list后面指定显示对象的参数通常有一下几种:-
<linenum>行号,显示对象为指定行号前、后若干行源码
-
<+offset>相对当前行的正偏移量,显示对象为当前行的后面若干行源码
-
<-offset>相对当前行的负偏移量,显示对象为当前行的前面若干行源码
-
<filename: linenum>显示对象为指定文件中指定行号前、后若干行源码
-
<function>函数名,显示对象为指定函数的源码
-
<filename: function>显示对象为指定文件中指定函数的源码
-
<*address>地址,显示指定地址处的源码
-
-
break [需设置的断点]break命令用来对被调试程序设置断点,在break后面的参数通常有下面几种:-
<linenum>行号,在当前源文件中的指定行处设置断点
-
<filename: linenum>在指定文件的指定行处设置断点
-
<function>函数名,在指定函数的入口处设置断点
-
<filename: function>在指定文件中指定函数的入口处设置断点
-
<*address>地址,在指定地址处设置断点
-
<condition>条件,只有在某些特定的条件成立时程序才会停下,称为条件断点
设置一个断点之后,它的起始状态是有效。可以使用
enable、disable来使某个断点有效或无效,也可以用delete命令来删除某个断点。比如,使用命令delete 2命令将2号断点删除
-
-
info br [source] stack [args]...info命令用来查看被调试程序的信息,其参数非常多,大部分不常用。其中,info br查看设置的所有断点的详细信息,包括断点号、类型、状态、内存地址、断点在源程序中的位置等;info source查看当前源程序;info stack查看栈信息,它反映了过程 (函数) 之间的调用层次关系;info args查看当前参数信息 -
watch <表达式>watch命令用来观察某个表达式或变量的值是否被修改,一旦被修改则暂停程序执行 -
print <表达式>print命令用来显示表达式的值,表达式中的变量必须是全局变量或当前栈区可见的变量。否则GDB会显示类似下面的信息:No symbol "xxxxxx" in current context -
x/NFU addressx命令用来检查内存单元的值,x是examine的意思。其中N代表重复数,F代表输出格式,U代表每个数据单位的大小,上述命令表示从地址address开始以F格式显示N个大小为U的数值。若不指定N,则默N为1;若不指定U,则默认每个数据单元为4个字节。F的取值可以是x(十六进制整数)、d(带符号十进制整数)、u(无符号十进制整数)、f(浮点数);U可以取b(字节)、h(双字节)、w(四字节)、g(八字节)。比如命令x/8ub 0x80490000表示以无符号十进制整数格式显示8字节数据信息 -
step跟踪进入到一个函数的内部
-
next继续执行下一条语句,若当前语句中包含函数调用,则不会进入函数内部,而是完成对当前语句中的函数调用后跟踪到下一条语句
-
continue程序在断点处暂停执行后,使用
continue令程序继续执行下去 -
quit退出
GDB
浙公网安备 33010602011771号