blob: defce7859aeb6b6a3a065a00d236c76b9aa64cdd [file] [log] [blame]
njne43d3ae2003-05-05 13:04:49 +00001
njne43d3ae2003-05-05 13:04:49 +00002Building and not installing it
3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
njne43d3ae2003-05-05 13:04:49 +00004
njn090dc842005-03-12 16:47:07 +00005To run Valgrind without having to install it, run coregrind/valgrind
sewardj45f4e7c2005-09-27 19:20:21 +00006with the VALGRIND_LIB environment variable set, where <dir> is the root
njn090dc842005-03-12 16:47:07 +00007of the source tree (and must be an absolute path). Eg:
8
sewardj45f4e7c2005-09-27 19:20:21 +00009 VALGRIND_LIB=~/grind/head4/.in_place ~/grind/head4/coregrind/valgrind
njne43d3ae2003-05-05 13:04:49 +000010
11This allows you to compile and run with "make" instead of "make install",
12saving you time.
13
14I recommend compiling with "make --quiet" to further reduce the amount of
15output spewed out during compilation, letting you actually see any errors,
16warnings, etc.
17
18
19Running the regression tests
20~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21To build and run all the regression tests, run "make [--quiet] regtest".
22
23To run a subset of the regression tests, execute:
24
25 perl tests/vg_regtest <name>
26
27where <name> is a directory (all tests within will be run) or a single
28.vgtest test file, or the name of a program which has a like-named .vgtest
29file. Eg:
30
31 perl tests/vg_regtest memcheck
32 perl tests/vg_regtest memcheck/tests/badfree.vgtest
33 perl tests/vg_regtest memcheck/tests/badfree
34
nethercote16b59ee2004-10-09 15:59:05 +000035
36Debugging Valgrind with GDB
37~~~~~~~~~~~~~~~~~~~~~~~~~~~
nethercote4fffabd2004-11-02 09:13:12 +000038To debug stage 1 just run it under GDB in the normal way.
39
40To debug Valgrind proper (stage 2) with GDB, start Valgrind like this:
nethercote16b59ee2004-10-09 15:59:05 +000041
42 valgrind --tool=none --wait-for-gdb=yes <prog>
43
44Then start gdb like this in another terminal:
45
46 gdb /usr/lib/valgrind/stage2 <pid>
47
48Where <pid> is the pid valgrind printed. Then set whatever breakpoints
49you want and do this in gdb:
50
51 jump *$eip
52
njn585b8b32005-10-10 11:36:55 +000053
54Self-hosting
55~~~~~~~~~~~~
56To run Valgrind under Valgrind:
57
58(1) Check out 2 trees, "inner" and "outer". "inner" runs the app
59 directly and is what you will be profiling. "outer" does the
60 profiling.
61
62(2) Configure inner with --enable-inner and build/install as
63 usual.
64
65(3) Configure outer normally and build/install as usual.
66
67(4) Choose a very simple program (date) and try
68
njn86d68072005-11-12 19:07:45 +000069 outer/.../bin/valgrind --sim-hints=enable-outer --trace-children=yes \
njn585b8b32005-10-10 11:36:55 +000070 --tool=cachegrind -v inner/.../bin/valgrind --tool=none -v prog
71
njn7cce5b82005-11-16 20:12:22 +000072If you omit the --trace-children=yes, you'll only monitor inner's launcher
73program, not its stage2.
74
75The whole thing is fragile, confusing and slow, but it does work well enough
76for you to get some useful performance data. The inner Valgrind has most of
77its output (ie. those lines beginning with "==<pid>==") prefixed with a '>',
78which helps a lot.
njn15a65632005-10-10 11:43:14 +000079
80At the time of writing the allocator is not annotated with client requests
81so Memcheck is not as useful as it could be. It also has not been tested
82much, so don't be surprised if you hit problems.
njn0dc09e82005-11-03 16:24:53 +000083
njn0b5efe72005-11-10 03:40:36 +000084
njn0dc09e82005-11-03 16:24:53 +000085Printing out problematic blocks
86~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87If you want to print out a disassembly of a particular block that
88causes a crash, do the following.
89
90Try running with "--vex-guest-chase-thresh=0 --trace-flags=10000000
91--trace-notbelow=999999". This should print one line for each block
92translated, and that includes the address.
93
94Then re-run with 999999 changed to the highest bb number shown.
95This will print the one line per block, and also will print a
96disassembly of the block in which the fault occurred.