gdb基本用法(转)[@more@]
GDB的使用
当程序出错并产生core 时
快速定位出错函数的办法
gdb 程序名 core文件名(一般是core,也可能是core.xxxx)
调试程序使用的键
r run 运行.程序还没有运行前使用
c cuntinue 继续运行。运行中断后继续运行
q 退出
kill 终止调试的程序
h help 帮助
命令补全功能step 跟入函数next 不跟入函数b breakpoint 设置断点。用法:b 函数名 对此函数进行中断b 文件名:行号 对此文件中指定行中断.如果是当前文件,那么文件名与:号可以省略看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面跟上 文件名:行号watch 观察一个变量的值。每次中断时都会显示这个变量的值p print 打印一个变量的值。与watch不同的是print只显示一次这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,这时候你会看到 b 的 value, 也就是上面的 $1 = 15.你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,这时候你会发现, b 的 value 就变成 100 了:$1 = 100.网上抄录基本的使用方法简介前言程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。一个除错程序执行的流程通常是这样的:1. 进入除错程序并指定可执行文件。2. 指定程序代码所在目录。3. 设定断点后执行程序。4. 程序于断点中断后,可以 (1)检视程序执行状态;检视变量值或变更变量值 (2) 逐步执行程序,或是全速执行程序到下一个断点或是到程序结束为止。5. 离开除错程序。以下将分为下列数项分别介绍:1. 进入 GDB 及指定可执行档2. 指定程序代码所在目录及检视程序代码3. 断点的设定与清除4. 全速及逐步执行程序5. 检视及更改变量值6. 检视程序执行状态7. 读取 Core 文件信息进入 GDB 及指定可执行档:1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM'),准备进行除错。gdb PROGRAM指定程序代码所在目录及检视程序代码1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下,就不须指定程序代码所在目录。):(gdb) directory DIR2. 检视程序代码,格式计有:(gdb) list => 显示目前执行程序代码前后各五行的程序代码;或是显示从上次 list 之后的程序代码(gdb) list function => 显示该程序开始处前后五行的程序代码。(gdb) list - =>上次显示程序代码的前面的十行。断点的设定与清除1. 设定断点(指令为 break,可简写为 (b),格式计有:(gdb) break filename.c:30 => 在 filename.c 的第三十行处停止执行。(gdb) break function => 在进入 function 时中断程序的执行。(gdb) break filename.c:function => 在程序代码档 filename.c 中的函数 function 处设定断点。(gdb) break => 在下一个将被执行的命令设定断点。(gdb) break ... if cond => 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。2. 显示各个断点的信息。(gdb) info break3. 清除断点(命令为 clear),格式同 break 。例如 :(gdb) clear filename.c:304. 清除断点,NUM 是在 info break 显示出来的断点编号。(gdb) delete NUM全速及逐步执行程序1. 从程序开头全速执行程序,直到遇到断点或是程序执行完毕为止。(gdb) run2. 在程序被中断后,全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。(gdb) continue3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。(gdb) next4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。(gdb) step5. 执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。(gdb) until6. 执行现行程序到回到上一层程序为止。(gdb) finish检视及更改变量值1. print 叙述,显示该叙述执行的结果 (print 指令可简写为 p)。如(gdb) print a => 显示 a 变量的内容.(gdb) print sizeof(a) => 显示 a 变量的长度.2. display 叙述,在每个断点或是每执行一步时显示该叙述值。如(gdb) display a3. 更改变量值:(gdb) print (a=10) => 将变量 a 的值设定为 10.检视程序执行状态1. 查看程序执行到此时,是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt),也就是查看函数呼叫堆栈。(gdb) backtrace读取 Core 文件信息1. 读入 PROGRAM 及 PROGRAM.CORE 档,可检视 Core Dump 时程序变量值及程序流程状态 。gdb PROGRAM core说明:'core' 档案是由 PROGRAM 档执行后,遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档,我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后,你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-944661/
,如需转载,请注明出处,否则将追究法律责任。