1. 什么是gdb
??gdb(GNU symbolic debugger)是GNU开源组织发布的一个强大的Linux下的程序调试工具(GNU Project 调试器),它使你可以查看另一个程序在“执行”期间正在执行的操作,或该程序崩溃时正在执行的操作。 ??gdb主要可以如下4个方面的事情: ??(1)启动我们的程序,可以按照我们的自定义的要求随心所欲的运行程序。 ??(2)使程序在指定条件下停止。 ??(3)检查程序停止时发生的情况。 ??(4)更改程序中的内容,以便我们可以尝试纠正一个错误的影响,然后继续学习另一个错误。
2. gdb调试命令
??写在前面:gdb调试的是可执行文件,而且这个可执行文件必须带有调试信息才行(gcc编译时必须带有-g参数),而非.c文件(源文件),例如我们有一个名为e_test的可执行文件,启动e_tset调试的方法为:gdb ./e_test 。
2.1 运行指令(Program running commands)
说??明:以下这些命令用于运行程序。 指??令:
- (gdb) run(简称 r):全速运行程序,直到遇到“断点”或“程序产生错误”时停止。
- (gdb) continue (简称 c):继续运行程序,直到遇到下一个断点或错误。
- (gdb) finish :运行程序,直到当前函数(function)执行完成。
- (gdb) step(简称 s):执行下一行程序(若下一行是个函数,则会进入函数体内)。
- (gdb) step N (简称 s N) :执行下N行代码。
- (gdb) stepi (简称 si):执行完一条机器指令,然后停止并返回到调试器。
- (gdb) next (简称 n) :执行下一行代码,与s类似,但是next不进入函数体。
- (gdb) nexti (简称 ni) :执行一条机器指令。如果是一个函数调用,则该命令将继续执行,直到函数返回。
- (gdb) until (简称 u) :在堆栈中上升一层,该命令用于避免单步执行循环多次。
- (gdb) until N (简称 u N):执行运行程序,直到当前行前面已经运行了N行代码。
2.2 断点指令(Breakpoint commands)
说??明:该命令在指定位置设置软件断点,断点可以是函数名、行号或指令地址。 指??令:
- (gdb) b main:在main函数入口设置断点。
- (gdb) b:在当前行设置断点。
- (gdb) b <n>:在第n行设置断点。
- (gdb) b +<n>:在当前行之后(forward)的第n行设置断点。
- (gdb) b -<n>:在当前行之前(backward)的第n行设置断点。
- (gdb) b <function>:在function函数处设置断点。
- (gdb) b <filename>::在某个文件(filename)的第linenum行设置断点。
- (gdb) b : :在某个文件(filename)的函数(function)处设置断点。
- (gdb) b * <address> :在地址(address)处设置断点。
2.3 回溯指令(Backtrace command)
说??明:回溯指令(简称bt)可以打印整个堆栈的信息。在任何时候,均可以通过输入系统中断字符(Ctrl + c)停止回溯。 指??令:
|