blob: 798c47c1495aac8605eda7ee8b26746fb0aa449f [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
69 outer/.../bin/valgrind --weird-hacks=enable-outer \
70 --tool=cachegrind -v inner/.../bin/valgrind --tool=none -v prog
71
72It's fragile, confusing and slow, but it does work well enough for
njn15a65632005-10-10 11:43:14 +000073you to get some useful performance data. The inner Valgrind has most of
74its output (ie. those lines beginning with "==<pid>==") prefixed with a
75'>', which helps a lot.
76
77At the time of writing the allocator is not annotated with client requests
78so Memcheck is not as useful as it could be. It also has not been tested
79much, so don't be surprised if you hit problems.
njn0dc09e82005-11-03 16:24:53 +000080
81Printing out problematic blocks
82~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83If you want to print out a disassembly of a particular block that
84causes a crash, do the following.
85
86Try running with "--vex-guest-chase-thresh=0 --trace-flags=10000000
87--trace-notbelow=999999". This should print one line for each block
88translated, and that includes the address.
89
90Then re-run with 999999 changed to the highest bb number shown.
91This will print the one line per block, and also will print a
92disassembly of the block in which the fault occurred.