There are some bug in the sub-tool for valgrind.  I want to debug it 
via printing log, but there is a lot of log and run slowly I can not stand it .

And is there any tools like gdb , I can the debug the sub-tool for vaglrind at 
some point in my test program.


As Philippe says in another thread, see README_DEVELOPERS.

Beyond that, there are the usual low-level debugging hints:
1. strace -f -o strace.out -e trace=execve -v -s 300 valgrind /bin/date
Then in strace.out:
   execve("/usr/lib64/valgrind/memcheck-amd64-linux", ["valgrind", ...],
     ..., "VALGRIND_LAUNCHER=/usr/bin/valgrind"])
and that last environment variable is important, as well as the pathname
in the first argument to execve().  Everything must correspond; mixing
components will cause confusion and/or errors.

2. When all else fails, then insert a deliberate infinite loop at
(or just before) the point of interest::
        write(2, "\n\nHELP!\n\n", 9);  /* reminder to developer */
        for (;;) ;  /* deliberate infinite loop */
Invoke your tool normally (not using any debugger), and watch the CPU 
utilization
using /usr/bin/top in another window.  When the CPU utilization reaches 100%
and/or the HELP! message appears, then attach gdb to the process:
        gdb path_to_program_name -p PID   ## PID is the process ID
Now you can look around in gdb.

You may have to add symbol tables manually.  In a command-line shell, invoke
"cat /proc/PID/maps" to get the layout of the address space, such as:
 =====
 555be56ae000-555be56ba000 r-xp 00000000 08:03 524616                     
/usr/bin/cat
 555be58b9000-555be58ba000 r--p 0000b000 08:03 524616                     
/usr/bin/cat
 555be58ba000-555be58bb000 rw-p 0000c000 08:03 524616                     
/usr/bin/cat
 555be5baa000-555be5bcb000 rw-p 00000000 00:00 0                          [heap]
 7efd424dd000-7efd4907c000 r--p 00000000 08:03 544504                     
/usr/lib/locale/locale-archive
 7efd4907c000-7efd49238000 r-xp 00000000 08:03 532794                     
/usr/lib64/libc-2.24.so
   [[snip]
 =====

Then for each program or shared library file:
        $ objdump --section-headers path_to_file  |  grep text
 12 .text         00007729  0000000000001bc0  0000000000001bc0  00001bc0  2**4
        $ gdb  # another gdb
        (gdb) print 0x555be56ae000 + 0x00001bc0
        $1 = 0x555be56afbc0

Go back to the gdb that was invoked with -p, and add the symbols using:
        (gdb) add-symbol-file path_to_file 0x555be56afbc0

[Caution: short infinite loops cause the CPU chip to become very hot, quickly.
Avoid executing such a loop for more than a few seconds at a time.]

--





------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to