This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
RE: Linux Kernel GDB tracepoint module demo release
> -----Original Message-----
> From: gdb-owner@sourceware.org
> [mailto:gdb-owner@sourceware.org] On Behalf Of Michael Snyder
> Sent: Wednesday, August 11, 2010 5:11 PM
> To: Hui Zhu
> Cc: gdb@sourceware.org; linux-kernel@vger.kernel.org
> Subject: Re: Linux Kernel GDB tracepoint module demo release
>
> Actually, this is kind of interesting.
> Can your system set a tracepoint at any arbitrary location in the
> kernel? If so, I think that makes it more powerful than existing
> systems such as LTTng, which can only trace statically pre-determined
> locations.
You missed a great Tracing mini-summit at LinuxCon last Monday:
http://lttng.org/tracingwiki/index.php/TracingMiniSummit2010
We discussed the different tracing technologies and talked about
Kernel vs User space.
So, yes, LTTng provides highly efficient _static_ tracing for the kernel.
The LTTng tracepoints are already in the kernel. http://lttng.org/
There is also a new User Space Tracer (UST) provided by LTTng.
http://lttng.org/ust
There is also Kprobes, which are dynamic tracepoints for the Kernel.
They seem very similar to GDB Tracepoints actually.
http://sourceware.org/systemtap/kprobes/
Stan gave a great presentation about GDB Tracepoints and some upcoming work.
And I spoke about Eclipse's support for GDB Tracepoints and for LTTng.
I think having access to GDB Tracepoints for the kernel may be very nice.
I imagine a user tracing both kernel and user space at the same time, using
the same interface (preferably Eclipse :-))
Interesting work Hui!
Marc
>
> Hui Zhu wrote:
> > Hi,
> >
> > GDB Tracepoint
> (http://sourceware.org/gdb/current/onlinedocs/gdb/Tracepoints.html)
> > is new feature that make GDB can debug real-time program.
> > I think this feature is very fit for debug Linux Kernel.
> So I make a
> > lkm to make kernel support it. You can get it in
> > https://code.google.com/p/kgtp/
> >
> > I just release the demo for it. It just support collect $reg in
> > x86_32. I will add the other tracepoint support in the future.
> >
> > For example:
> > tar vxjf gtp_20100811.tar.bz2
> > cd gtp
> > make
> > insmod gtp.ko
> > gdb ./vmlinux
> > GNU gdb (GDB) 7.2.50.20100720-cvs
> > Copyright (C) 2010 Free Software Foundation, Inc.
> > License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> > This is free software: you are free to change and redistribute it.
> > There is NO WARRANTY, to the extent permitted by law. Type
> "show copying"
> > and "show warranty" for details.
> > This GDB was configured as "i686-pc-linux-gnu".
> > For bug reporting instructions, please see:
> > <http://www.gnu.org/software/gdb/bugs/>...
> > Reading symbols from /vmlinux...done.
> > (gdb) target remote /proc/gtp
> > Remote debugging using /proc/gtp
> > 0x00000000 in ?? ()
> > (gdb) trace vfs_readdir
> > Tracepoint 1 at 0xc01a1ac0: file
> > /home/teawater/kernel/linux-2.6/fs/readdir.c, line 23.
> > (gdb) actions
> > Enter actions for tracepoint 1, one per line.
> > End with a line saying just "end".
> >> collect $reg
> >> end
> > (gdb) tstart
> > (gdb) shell ls
> > (gdb) tstop
> > (gdb) tfind
> > Found trace frame 0, tracepoint 1
> > #0 0xc01a1ac1 in vfs_readdir (file=0xc5528d00,
> filler=0xc01a1900 <filldir64>,
> > buf=0xc0d09f90) at
> /home/teawater/kernel/linux-2.6/fs/readdir.c:23
> > 23 /home/teawater/kernel/linux-2.6/fs/readdir.c: No such
> file or directory.
> > in /home/teawater/kernel/linux-2.6/fs/readdir.c
> > (gdb) info reg
> > eax 0xc5528d00 -984445696
> > ecx 0xc0d09f90 -1060069488
> > edx 0xc01a1900 -1072031488
> > ebx 0xfffffff7 -9
> > esp 0xc0d09f8c 0xc0d09f8c
> > ebp 0x0 0x0
> > esi 0x8061480 134616192
> > edi 0xc5528d00 -984445696
> > eip 0xc01a1ac1 0xc01a1ac1 <vfs_readdir+1>
> > eflags 0x286 [ PF SF IF ]
> > cs 0x60 96
> > ss 0x8061480 134616192
> > ds 0x7b 123
> > es 0x7b 123
> > fs 0x0 0
> > gs 0x0 0
> > (gdb) tfind
> > Found trace frame 1, tracepoint 1
> > 0xc01a1ac1 23 in /home/teawater/kernel/linux-2.6/fs/readdir.c
> > (gdb) info reg
> > eax 0xc5528d00 -984445696
> > ecx 0xc0d09f90 -1060069488
> > edx 0xc01a1900 -1072031488
> > ebx 0xfffffff7 -9
> > esp 0xc0d09f8c 0xc0d09f8c
> > ebp 0x0 0x0
> > esi 0x8061480 134616192
> > edi 0xc5528d00 -984445696
> > eip 0xc01a1ac1 0xc01a1ac1 <vfs_readdir+1>
> > eflags 0x286 [ PF SF IF ]
> > cs 0x60 96
> > ss 0x8061480 134616192
> > ds 0x7b 123
> > es 0x7b 123
> > fs 0x0 0
> > gs 0x0 0
> > (gdb) tfind
> > Found trace frame 2, tracepoint 1
> > #0 0xc01a1ac1 in vfs_readdir (file=0xc5528300,
> filler=0xc01a19e0 <filldir>,
> > buf=0xc6c2df90) at
> /home/teawater/kernel/linux-2.6/fs/readdir.c:23
> > 23 in /home/teawater/kernel/linux-2.6/fs/readdir.c
> > (gdb)
> > Found trace frame 3, tracepoint 1
> > 0xc01a1ac1 23 in /home/teawater/kernel/linux-2.6/fs/readdir.c
> > (gdb)
> > Target failed to find requested trace frame.
> > (gdb) quit
> > A debugging session is active.
> >
> > Inferior 1 [Remote target] will be killed.
> >
> > Quit anyway? (y or n) y
> >
> > Thanks,
> > Hui
>
>