This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Reverse Debugging Headaches


Hello,

The prec in cvs-head still doesn't support multi-thread inferior.
We just have a series of patches to make prec support multi-thread
inferior. You can get the link for it in
http://sourceware.org/gdb/wiki/ProcessRecord

BTW it didn't update follow gdb-cvs-head.   Mail me if you need it, I
will update it.

Thanks,
Hui

On Tue, Jan 12, 2010 at 04:57, Sean Soria <sean.soria@gmail.com> wrote:
> Are there instructions or advice to accompany this?
>
> On Mon, Jan 11, 2010 at 12:54 PM, Jan Kratochvil
> <jan.kratochvil@redhat.com> wrote:
>> On Mon, 11 Jan 2010 19:47:13 +0100, Michael Snyder wrote:
>>> Sean Soria wrote:
>>> >Whenever I try to reverse debug I break into the program, set target
>>> >record and then continue. I immediately hit some sort of simd
>>> >instruction (in things like strlen in libc) or unsupported ioctl call.
>>> > Is there any way around these issues?
>>>
>>> Shouldn't happen. ?What version gdb? ?What linux?
>>
>> gdb 7.0.50.20100111-cvs Fedora 12:
>>
>> kernel-2.6.32.1-9.fc13.x86_64 -> x86_64 gdb -> x86_64 inferior:
>> (gdb) start
>> Temporary breakpoint 1 at 0x400640: file threadit.c, line 40.
>> Starting program: /home/jkratoch/t/threadit
>> [Thread debugging using libthread_db enabled]
>> Temporary breakpoint 1, main () at threadit.c:40
>> 40 ? ? ? ?i = pthread_create (&thread1, NULL, start, NULL); ? ? /* create1 */
>> (gdb) record
>> (gdb) c
>> Continuing.
>> warning: Process record ignores the memory change of instruction at address 0x362de0db46 because it can't get the value of the segment register.
>> [...]
>> warning: Process record ignores the memory change of instruction at address 0x362e274d46 because it can't get the value of the segment register.
>> Process record doesn't support instruction 0xf6e at address 0x362e281a32.
>> Process record: failed to record execution log.
>> [Thread 0x7ffff7fe3700 (LWP 26985)] #1 stopped.
>> memset () at ../sysdeps/x86_64/memset.S:746
>> 746 ? ? ? ? ? ? ?movd ? %rdx,%xmm0
>> (gdb)
>>
>> kernel-2.6.32.1-9.fc13.x86_64 -> x86_64 gdb -> i386 inferior:
>> (gdb) start
>> Temporary breakpoint 1 at 0x80484f4: file /home/jkratoch/t/threadit.c, line 40.
>> Starting program: /home/jkratoch/t/threadit32
>> warning: .dynamic section for "/lib/libc.so.6" is not at the expected address
>> warning: difference appears to be caused by prelink, adjusting expectations
>> [Thread debugging using libthread_db enabled]
>> Temporary breakpoint 1, main () at /home/jkratoch/t/threadit.c:40
>> 40 ? ? ? ?i = pthread_create (&thread1, NULL, start, NULL); ? ? /* create1 */
>> (gdb) record
>> (gdb) c
>> Continuing.
>> warning: Process record ignores the memory change of instruction at address 0x18a7c5 because it can't get the value of the segment register.
>> Cannot find user-level thread for LWP 11809: generic error
>> (/lib/libpthread-2.11.so has been prelinked to avoid some existing bug)
>>
>> kernel-2.6.32.1-9.fc13.x86_64 -> i386 gdb -> i386 inferior:
>> (gdb) start
>> Temporary breakpoint 1 at 0x80484f4: file /home/jkratoch/t/threadit.c, line 40.
>> Starting program: /home/jkratoch/t/threadit32
>> [Thread debugging using libthread_db enabled]
>> Temporary breakpoint 1, main () at /home/jkratoch/t/threadit.c:40
>> 40 ? ? ? ?i = pthread_create (&thread1, NULL, start, NULL); ? ? /* create1 */
>> (gdb) record
>> (gdb) c
>> Continuing.
>> warning: Process record ignores the memory change of instruction at address 0x3557c5 because it can't get the value of the segment register.
>> Program terminated with signal SIGTRAP, Trace/breakpoint trap.
>> The program no longer exists.
>> (gdb)
>>
>>
>>
>> #include <pthread.h>
>> #include <assert.h>
>> #include <unistd.h>
>>
>> static volatile int var;
>>
>> static void *start (void *arg)
>> {
>> ?sleep (1);
>> ?return arg;
>> }
>>
>> int main (void)
>> {
>> ?pthread_t thread1;
>> ?int i;
>>
>> ?i = pthread_create (&thread1, NULL, start, NULL);
>> ?assert (i == 0);
>> ?i = pthread_join (thread1, NULL);
>> ?assert (i == 0);
>>
>> ?return 0;
>> }
>>
>>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]