blob: 2797565c1b7e4e1e5997a1e35a1b9b34dd0a4191 [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~~~~~~~~~~~~~~~~~~~~~~~~~~~
tom4a5223b2005-11-17 12:31:12 +000038To debug the valgrind launcher program (<prefix>/bin/valgrind) just
39run it under gdb in the normal way.
nethercote4fffabd2004-11-02 09:13:12 +000040
tom4a5223b2005-11-17 12:31:12 +000041Debugging the main body of the valgrind code (and/or the code for
42a particular tool) requires a bit more trickery but can be achieved
43without too much problem by following these steps:
nethercote16b59ee2004-10-09 15:59:05 +000044
tom4a5223b2005-11-17 12:31:12 +000045(1) Set VALGRIND_LAUNCHER to <prefix>/bin/valgrind:
nethercote16b59ee2004-10-09 15:59:05 +000046
tom4a5223b2005-11-17 12:31:12 +000047 export VALGRIND_LAUNCHER=/usr/local/bin/valgrind
nethercote16b59ee2004-10-09 15:59:05 +000048
tom4a5223b2005-11-17 12:31:12 +000049(2) Run "gdb <prefix>/lib/valgrind/<platform>/<tool>":
nethercote16b59ee2004-10-09 15:59:05 +000050
tom4a5223b2005-11-17 12:31:12 +000051 gdb /usr/local/lib/valgrind/ppc32-linux/lackey
nethercote16b59ee2004-10-09 15:59:05 +000052
tom4a5223b2005-11-17 12:31:12 +000053(3) Do "handle SIGSEGV SIGILL nostop noprint" in GDB to prevent GDB from
54 stopping on a SIGSEGV or SIGILL:
55
56 (gdb) handle SIGILL SIGSEGV nostop noprint
57
58(4) Set any breakpoints you want and proceed as normal for gdb. The
59 macro VG_(FUNC) is expanded to vgPlain_FUNC, so If you want to set
60 a breakpoint VG_(do_exec), you could do like this in GDB:
61
62 (gdb) b vgPlain_do_exec
63
64(5) Run the tool with required options:
65
66 (gdb) run pwd
nethercote16b59ee2004-10-09 15:59:05 +000067
njn585b8b32005-10-10 11:36:55 +000068
69Self-hosting
70~~~~~~~~~~~~
71To run Valgrind under Valgrind:
72
73(1) Check out 2 trees, "inner" and "outer". "inner" runs the app
74 directly and is what you will be profiling. "outer" does the
75 profiling.
76
77(2) Configure inner with --enable-inner and build/install as
78 usual.
79
80(3) Configure outer normally and build/install as usual.
81
82(4) Choose a very simple program (date) and try
83
njn86d68072005-11-12 19:07:45 +000084 outer/.../bin/valgrind --sim-hints=enable-outer --trace-children=yes \
njn585b8b32005-10-10 11:36:55 +000085 --tool=cachegrind -v inner/.../bin/valgrind --tool=none -v prog
86
njn7cce5b82005-11-16 20:12:22 +000087If you omit the --trace-children=yes, you'll only monitor inner's launcher
88program, not its stage2.
89
90The whole thing is fragile, confusing and slow, but it does work well enough
91for you to get some useful performance data. The inner Valgrind has most of
92its output (ie. those lines beginning with "==<pid>==") prefixed with a '>',
93which helps a lot.
njn15a65632005-10-10 11:43:14 +000094
95At the time of writing the allocator is not annotated with client requests
96so Memcheck is not as useful as it could be. It also has not been tested
97much, so don't be surprised if you hit problems.
njn0dc09e82005-11-03 16:24:53 +000098
weidendo10e80e32006-05-01 01:49:28 +000099When using self-hosting with an outer callgrind tool, use '--pop-on-jump'
100(on the outer). Otherwise, callgrind has much higher memory requirements.
101
njn0b5efe72005-11-10 03:40:36 +0000102
njn0dc09e82005-11-03 16:24:53 +0000103Printing out problematic blocks
104~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105If you want to print out a disassembly of a particular block that
106causes a crash, do the following.
107
108Try running with "--vex-guest-chase-thresh=0 --trace-flags=10000000
109--trace-notbelow=999999". This should print one line for each block
110translated, and that includes the address.
111
112Then re-run with 999999 changed to the highest bb number shown.
113This will print the one line per block, and also will print a
114disassembly of the block in which the fault occurred.