From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9372 invoked by alias); 22 Nov 2007 09:13:30 -0000 Received: (qmail 9360 invoked by uid 22791); 22 Nov 2007 09:13:29 -0000 X-Spam-Check-By: sourceware.org Received: from qb-out-0506.google.com (HELO qb-out-0506.google.com) (72.14.204.225) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 22 Nov 2007 09:13:20 +0000 Received: by qb-out-0506.google.com with SMTP id e6so1563849qbe for ; Thu, 22 Nov 2007 01:13:18 -0800 (PST) Received: by 10.142.103.6 with SMTP id a6mr2298709wfc.1195722796765; Thu, 22 Nov 2007 01:13:16 -0800 (PST) Received: by 10.143.36.21 with HTTP; Thu, 22 Nov 2007 01:13:16 -0800 (PST) Message-ID: Date: Thu, 22 Nov 2007 09:13:00 -0000 From: Tea To: gdb-patches@sourceware.org Subject: GDB record patch 0.1.1 for GDB-6.6 release (It make I386 and MIPS GDB support Reversible Debugging) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_13042_844831.1195722796758" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-11/txt/msg00405.txt.bz2 ------=_Part_13042_844831.1195722796758 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 3617 Hi everybody, GDB record patch disassemble the instruction that will be executed to get which memory and register will be changed and record them to record all the program running message. The main change of this version record patch is support the I386 instructions(System call, floating-point instructions and SSE instructions are still not support). The work of next stage is make GDB record patch support I386-Linux system call. Please give me your thought about the "record" and help me test it. Thanks a lot. BTW, I am sorry I compress the patch because it is too big to send to the maillist. To make and install the GDB record patch 0.1.1 with GDB-6.6: tar vxjf gdb-6.6.tar.bz2 bunzip2 gdb-6.6-record-0.1.1.patch.bz2 patch -p0 < gdb-6.6-record-0.1.1.patch mkdir bgdb cd bgdb ../gdb-6.6/configure make make install The following is how to use the record: cat 1.c int a = 0; int cool () { a += 3; return (a); } int main() { int b = 0; int c = 1; b = cool (); c += 1; a -= 2; return (0); } gcc -g 1.c gdb a.out GNU gdb 6.6 Record 0.1.1 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/xxx/rec/bgdb/gdb/.gdbinit:8: Error in sourced command file: No breakpoint number 0. (gdb) b main Breakpoint 1 at 0x8048331: file 1.c, line 12. (gdb) r Starting program: /home/xxx/rec/bgdb/gdb/a.out Breakpoint 1, main () at 1.c:12 12 int b = 0; (gdb) p a $1 = 0 (gdb) p b During symbol reading, incomplete CFI data; unspecified registers (e.g., eax) at 0x8048324. $2 = 134513500 (gdb) p c $3 = 7610400 (gdb) rec record: record and reverse function is started. (gdb) n 13 int c = 1; (gdb) 15 b = cool (); (gdb) 17 c += 1; (gdb) p a $4 = 3 (gdb) p b $5 = 3 (gdb) p c $6 = 1 (gdb) n 18 a -= 2; (gdb) 20 return (0); (gdb) p a $7 = 1 (gdb) p b $8 = 3 (gdb) p c $9 = 2 (gdb) rev record: GDB is set to reverse debug mode. (gdb) s 18 a -= 2; (gdb) 0x0804834a 17 c += 1; (gdb) p a $10 = 3 (gdb) p b $11 = 3 (gdb) p c $12 = 1 (gdb) s 0x08048344 15 b = cool (); (gdb) s cool () at 1.c:5 5 a += 3; (gdb) p a $13 = 0 (gdb) s 0x08048311 4 { (gdb) main () at 1.c:15 15 b = cool (); (gdb) 13 int c = 1; (gdb) p a $14 = 0 (gdb) p b $15 = 0 (gdb) p c $16 = 7610400 (gdb) rev record: GDB is set to normal debug mode. (gdb) n 15 b = cool (); (gdb) 17 c += 1; (gdb) n 18 a -= 2; (gdb) p a $4 = 3 (gdb) p b $5 = 3 (gdb) p c $6 = 2 (gdb) quit The program is running. Exit anyway? (y or n) y record: record and reverse function is stopped. You can find out the change of the values of "a", "b" and "c" when the GDB normal debug and reverse debug. Thanks, teawater Signed-Off-By: Teawater Zhu ------=_Part_13042_844831.1195722796758 Content-Type: application/x-bzip2; name=gdb-6.6-record-0.1.1.patch.bz2 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f9b2eait0 Content-Disposition: attachment; filename=gdb-6.6-record-0.1.1.patch.bz2 Content-length: 16653 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 ------=_Part_13042_844831.1195722796758--