From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30872 invoked by alias); 10 Aug 2007 09:31:59 -0000 Received: (qmail 30720 invoked by uid 22791); 10 Aug 2007 09:31:58 -0000 X-Spam-Check-By: sourceware.org Received: from rv-out-0910.google.com (HELO rv-out-0910.google.com) (209.85.198.188) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 10 Aug 2007 09:31:53 +0000 Received: by rv-out-0910.google.com with SMTP id l15so568868rvb for ; Fri, 10 Aug 2007 02:31:51 -0700 (PDT) Received: by 10.142.234.12 with SMTP id g12mr551210wfh.1186738311699; Fri, 10 Aug 2007 02:31:51 -0700 (PDT) Received: by 10.142.72.10 with HTTP; Fri, 10 Aug 2007 02:31:51 -0700 (PDT) Message-ID: Date: Fri, 10 Aug 2007 09:31:00 -0000 From: teawater To: gdb@sources.redhat.com Subject: GDB record target 0.0.1 for GDB-6.6 release (It make GDB support Reversible Debugging) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_15992_24259939.1186738311173" X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2007-08/txt/msg00094.txt.bz2 ------=_Part_15992_24259939.1186738311173 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 5010 Hi All, The attachment is a patch for the GDB-6.6 that will add two commands ("record" and "reverse") and a new target "record" to the GDB-6.6. The command "record" can record running message such as the program pc register value and some frame message to a record file that default name is "now.rec". The target "record" can open this record file and debug the program. And if the current target is the "record", you can use command "reverse" set debug to the reverse debug mode. If you set GDB to the reverse debug mode. The program will reverse run. Most of GDB command such as "step", "next" and "breakpoint" can be use in this mode. Maybe the record function can make GDB debug real time program more easy than before because you can record all the running message when the real time program cannot be interrupt and debug it after it was running. Now, the record function is not very complete. In the future, I will make it more useful such as record all the register value, record the memory change and make it only record the running message of some program code. Please give me your thought about the "record". Thanks a lot. To make and install the GDB record target 0.0.1 with GDB-6.6: tar vxjf gdb-6.6.tar.bz2 bunzip2 gdb-6.6-record-0.0.1.patch.bz2 patch -p0 < gdb-6.6-record-0.0.1.patch mkdir bgdb cd bgdb ../gdb-6.6/configure make make install To use the GDB record function: cat 1.c void cool () { printf ("123"); } int main(int argc,char *argv[],char *envp[]) { int a = 0; printf ("1\n"); cool (); a = 1; a += 2; return (0); } gcc -g 1.c ./gdb a.out GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... Using host libthread_db library "/lib/tls/libthread_db.so.1". Setting up the environment for debugging gdb. Function "internal_error" not defined. Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal] Function "info_command" not defined. Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal] /home/qwang/rec/bgdb/gdb/.gdbinit:8: Error in sourced command file: No breakpoint number 0. (gdb) b main Breakpoint 1 at 0x804836c: file 1.c, line 9. (gdb) r Starting program: /home/qwang/rec/bgdb/gdb/a.out Breakpoint 1, main (argc= During symbol reading, incomplete CFI data; unspecified registers (e.g., eax) at 0x804837b. 1, argv=0xbfffdae4, envp=0xbfffdaec) at 1.c:9 9 int a = 0; (gdb) rec Record the paogram running message to the file "now.rec". 1 During symbol reading, incomplete CFI data; DW_CFA_restore unspecified register ebx (#3) at 0x0075df5f. 123 Program exited normally. (gdb) quit ./gdb a.out GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... Using host libthread_db library "/lib/tls/libthread_db.so.1". Setting up the environment for debugging gdb. Function "internal_error" not defined. Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal] Function "info_command" not defined. Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal] /home/qwang/rec/bgdb/gdb/.gdbinit:8: Error in sourced command file: No breakpoint number 0. (gdb) target rec Record the paogram running message to the file "now.rec". main (argc=Cannot access memory at address 0x8 ) at 1.c:9 9 int a = 0; (gdb) n 11 printf ("1\n"); (gdb) 13 cool (); (gdb) 15 a = 1; (gdb) c Continuing. 0x00738b09 in ?? () (gdb) rev GDB is set to reverse debug mode. (gdb) b 16 Breakpoint 1 at 0x804838f: file 1.c, line 16. (gdb) c Continuing. Breakpoint 1, main (argc=Cannot access memory at address 0x8 ) at 1.c:16 16 a += 2; (gdb) n 15 a = 1; (gdb) n 13 cool (); (gdb) rev GDB is set to normal debug mode. (gdb) s cool () at 1.c:4 4 printf ("123"); (gdb) n 5 } (gdb) main (argc=Cannot access memory at address 0x8 ) at 1.c:15 15 a = 1; (gdb) rev GDB is set to reverse debug mode. (gdb) s cool () at 1.c:4 4 printf ("123"); (gdb) s 0x08048347 3 { (gdb) main (argc=Cannot access memory at address 0x8 ) at 1.c:13 13 cool (); (gdb) quit The program is running. Exit anyway? (y or n) y Thanks, teawater ------=_Part_15992_24259939.1186738311173 Content-Type: application/x-bzip2; name=gdb-6.6-record-0.0.1.patch.bz2 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f56h7n92 Content-Disposition: attachment; filename="gdb-6.6-record-0.0.1.patch.bz2" Content-length: 9268 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 ------=_Part_15992_24259939.1186738311173--