KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /usr/share/doc/valgrind-3.5.0/html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/doc/valgrind-3.5.0/html/dist.readme-developers.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>5. README_DEVELOPERS</title>
<link rel="stylesheet" href="vg_basic.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
<link rel="start" href="index.html" title="Valgrind Documentation">
<link rel="up" href="dist.html" title="Valgrind Distribution Documents">
<link rel="prev" href="dist.readme-missing.html" title="4. README_MISSING_SYSCALL_OR_IOCTL">
<link rel="next" href="dist.readme-packagers.html" title="6. README_PACKAGERS">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div><table class="nav" width="100%" cellspacing="3" cellpadding="3" border="0" summary="Navigation header"><tr>
<td width="22px" align="center" valign="middle"><a accesskey="p" href="dist.readme-missing.html"><img src="images/prev.png" width="18" height="21" border="0" alt="Prev"></a></td>
<td width="25px" align="center" valign="middle"><a accesskey="u" href="dist.html"><img src="images/up.png" width="21" height="18" border="0" alt="Up"></a></td>
<td width="31px" align="center" valign="middle"><a accesskey="h" href="index.html"><img src="images/home.png" width="27" height="20" border="0" alt="Up"></a></td>
<th align="center" valign="middle">Valgrind Distribution Documents</th>
<td width="22px" align="center" valign="middle"><a accesskey="n" href="dist.readme-packagers.html"><img src="images/next.png" width="18" height="21" border="0" alt="Next"></a></td>
</tr></table></div>
<div class="chapter" lang="en">
<div class="titlepage"><div><div><h2 class="title">
<a name="dist.readme-developers"></a>5. README_DEVELOPERS</h2></div></div></div>
<div class="literallayout"><p><br>
      <br>
Building and not installing it<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
To run Valgrind without having to install it, run coregrind/valgrind<br>
with the VALGRIND_LIB environment variable set, where &lt;dir&gt; is the root<br>
of the source tree (and must be an absolute path).  Eg:<br>
<br>
  VALGRIND_LIB=~/grind/head4/.in_place ~/grind/head4/coregrind/valgrind <br>
<br>
This allows you to compile and run with "make" instead of "make install",<br>
saving you time.<br>
<br>
Or, you can use the 'vg-in-place' script which does that for you.<br>
<br>
I recommend compiling with "make --quiet" to further reduce the amount of<br>
output spewed out during compilation, letting you actually see any errors,<br>
warnings, etc.<br>
<br>
<br>
Running the regression tests<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
To build and run all the regression tests, run "make [--quiet] regtest".<br>
<br>
To run a subset of the regression tests, execute:<br>
<br>
  perl tests/vg_regtest &lt;name&gt;<br>
<br>
where &lt;name&gt; is a directory (all tests within will be run) or a single<br>
.vgtest test file, or the name of a program which has a like-named .vgtest<br>
file.  Eg:<br>
<br>
  perl tests/vg_regtest memcheck<br>
  perl tests/vg_regtest memcheck/tests/badfree.vgtest<br>
  perl tests/vg_regtest memcheck/tests/badfree<br>
<br>
<br>
Running the performance tests<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
To build and run all the performance tests, run "make [--quiet] perf".<br>
<br>
To run a subset of the performance suite, execute:<br>
<br>
  perl perf/vg_perf &lt;name&gt;<br>
<br>
where &lt;name&gt; is a directory (all tests within will be run) or a single<br>
.vgperf test file, or the name of a program which has a like-named .vgperf<br>
file.  Eg:<br>
<br>
  perl perf/vg_perf perf/<br>
  perl perf/vg_perf perf/bz2.vgperf<br>
  perl perf/vg_perf perf/bz2<br>
<br>
To compare multiple versions of Valgrind, use the --vg= option multiple<br>
times.  For example, if you have two Valgrinds next to each other, one in<br>
trunk1/ and one in trunk2/, from within either trunk1/ or trunk2/ do this to<br>
compare them on all the performance tests:<br>
<br>
  perl perf/vg_perf --vg=../trunk1 --vg=../trunk2 perf/<br>
<br>
<br>
Debugging Valgrind with GDB<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
To debug the valgrind launcher program (&lt;prefix&gt;/bin/valgrind) just<br>
run it under gdb in the normal way.<br>
<br>
Debugging the main body of the valgrind code (and/or the code for<br>
a particular tool) requires a bit more trickery but can be achieved<br>
without too much problem by following these steps:<br>
<br>
(1) Set VALGRIND_LAUNCHER to point to the valgrind executable.  Eg:<br>
<br>
      export VALGRIND_LAUNCHER=/usr/local/bin/valgrind<br>
<br>
    or for an uninstalled version in a source directory $DIR:<br>
<br>
      export VALGRIND_LAUNCHER=$DIR/coregrind/valgrind<br>
<br>
(2) Run gdb on the tool executable.  Eg:<br>
<br>
      gdb /usr/local/lib/valgrind/ppc32-linux/lackey<br>
<br>
    or<br>
<br>
      gdb $DIR/.in_place/x86-linux/memcheck<br>
<br>
(3) Do "handle SIGSEGV SIGILL nostop noprint" in GDB to prevent GDB from<br>
    stopping on a SIGSEGV or SIGILL:<br>
<br>
    (gdb) handle SIGILL SIGSEGV nostop noprint<br>
<br>
(4) Set any breakpoints you want and proceed as normal for gdb. The<br>
    macro VG_(FUNC) is expanded to vgPlain_FUNC, so If you want to set<br>
    a breakpoint VG_(do_exec), you could do like this in GDB:<br>
<br>
    (gdb) b vgPlain_do_exec<br>
<br>
(5) Run the tool with required options:<br>
<br>
    (gdb) run pwd<br>
<br>
Steps (1)--(3) can be put in a .gdbinit file, but any directory names must<br>
be fully expanded (ie. not an environment variable).<br>
<br>
<br>
Self-hosting<br>
~~~~~~~~~~~~<br>
To run Valgrind under Valgrind:<br>
<br>
(1) Check out 2 trees, "Inner" and "Outer".  Inner runs the app<br>
    directly.  Outer runs Inner.<br>
<br>
(2) Configure inner with --enable-inner and build/install as<br>
    usual.<br>
<br>
(3) Configure Outer normally and build/install as usual.<br>
<br>
(4) Choose a very simple program (date) and try<br>
<br>
    outer/.../bin/valgrind --sim-hints=enable-outer --trace-children=yes  \<br>
       --tool=cachegrind -v inner/.../bin/valgrind --tool=none -v prog<br>
<br>
If you omit the --trace-children=yes, you'll only monitor Inner's launcher<br>
program, not its stage2.<br>
<br>
The whole thing is fragile, confusing and slow, but it does work well enough<br>
for you to get some useful performance data.  Inner has most of<br>
its output (ie. those lines beginning with "==&lt;pid&gt;==") prefixed with a '&gt;',<br>
which helps a lot.<br>
<br>
At the time of writing the allocator is not annotated with client requests<br>
so Memcheck is not as useful as it could be.  It also has not been tested<br>
much, so don't be surprised if you hit problems.<br>
<br>
When using self-hosting with an outer Callgrind tool, use '--pop-on-jump'<br>
(on the outer). Otherwise, Callgrind has much higher memory requirements. <br>
<br>
<br>
Printing out problematic blocks<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
If you want to print out a disassembly of a particular block that<br>
causes a crash, do the following.<br>
<br>
Try running with "--vex-guest-chase-thresh=0 --trace-flags=10000000<br>
--trace-notbelow=999999".  This should print one line for each block<br>
translated, and that includes the address.<br>
<br>
Then re-run with 999999 changed to the highest bb number shown.<br>
This will print the one line per block, and also will print a<br>
disassembly of the block in which the fault occurred.<br>
<br>
    </p></div>
</div>
<div>
<br><table class="nav" width="100%" cellspacing="3" cellpadding="2" border="0" summary="Navigation footer">
<tr>
<td rowspan="2" width="40%" align="left">
<a accesskey="p" href="dist.readme-missing.html">&lt;&lt; 4. README_MISSING_SYSCALL_OR_IOCTL</a> </td>
<td width="20%" align="center"><a accesskey="u" href="dist.html">Up</a></td>
<td rowspan="2" width="40%" align="right"> <a accesskey="n" href="dist.readme-packagers.html">6. README_PACKAGERS &gt;&gt;</a>
</td>
</tr>
<tr><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td></tr>
</table>
</div>
</body>
</html>

Anon7 - 2021