利用GDB7.0的反向调试(reverse debug)特性调试程序
时间:2010-07-01 来源:lenky0401
利用GDB7.0的反向调试(reverse debug)特性调试程序
GDB7.0 是 2009 年 10 月6号份正式发布的,其提供了一个名为反向调试 (reverse debug:Reverse debugging, Process record and replay,http://sourceware.org/gdb/news/) 的新特性对于我们平常调试程序会有所帮助。
October 06, 2009: GDB 7.0 Released!
The latest version of GDB, version 7.0, is available for download.
Changes in this release include:
Support for native x86/x86_64 Darwin, x86_64 MinGW
Support for Lattice Mico32, x86/x86_64 DICOS, S+core 3 targets
gdbserver support for x86 Windows CE
Python scripting support
Reverse debugging, Process record and replay
Non-stop debugging
Multi-architecture debugging
Multi-inferior, multi-process debugging
See the NEWS file for a more complete and detailed list of what this release includes.
从字面上理解,平常我们的调试总是下一步,下一步来进行,而“反向调试”应该就是上一步,上一步,事实上,GDB7.0提供的确实也是这样的功能。在对一个较为复杂的软件程序进行调试时,我们往往无法做到一次性的把断点设置在最恰当的地方,所以经常会发现重要的代码执行路径已经错过。遇到这种情况,一般是重新启动调试会话,从头再来。而GDB7.0提供的反向调试功能使得我们无须重新启动调试程序,只要简单地让被调试进程反向执行到那个被怀疑的地方即可,该功能很明显的好处就是这无疑将极大地提高工作效率。
废话少说,看实例,170上目录/home/gqk/gqk/gdb下已经有最新的gdb7.1程序,实例中几个命令查下文档就知道了,不用多说:O(∩_∩)O~
gqk/AC ~/gqk/gdb $ ls
gdb-7.1/ gdb.7.1* gdb-7.1.tar.bz2 test* test.c
gqk/AC ~/gqk/gdb $ ./gdb.7.1 -q
(gdb) exec-file test
(gdb) l
No symbol table is loaded. Use the "file" command.
(gdb) file test
Reading symbols from /usr/src/home/gqk/gdb/test...done.
(gdb) l
1 #include <stdio.h>
2 #include <stdbool.h>
3 int main()
4 {
5 int a = 100;
6 a ++;
7 a --;
8 a += 2;
9 a -= 3;
10 return 0;
(gdb) b 5
Breakpoint 1 at 0x8048304: file test.c, line 5.
(gdb) r
Starting program: /usr/src/home/gqk/gdb/test
Breakpoint 1, main () at test.c:5
5 int a = 100;
(gdb) record
(gdb) n
6 a ++;
(gdb) n
7 a --;
(gdb) p a
$1 = 101
(gdb) rn
6 a ++;
(gdb) p a
$2 = 100
(gdb) n
No more reverse-execution history.
main () at test.c:7
7 a --;
(gdb) p a
$3 = 101
(gdb) n
8 a += 2;
(gdb) p a
$4 = 100
(gdb) n
9 a -= 3;
(gdb) p a
$5 = 102
(gdb) n
10 return 0;
(gdb) p a
$6 = 99
(gdb) rn
9 a -= 3;
(gdb) p a
$7 = 102
(gdb)