| Valgrind 3.3 - Advanced Debugging and Profiling for GNU/Linux applications by J. Seward, N. Nethercote, J. Weidendorfer and the Valgrind Development Team Paperback (6"x9"), 164 pages ISBN 0954612051 RRP £12.95 ($19.95) |
3.2 Getting started
First off, consider whether it might be beneficial to recompile
your application and supporting libraries with debugging info enabled
(the -g flag). Without debugging info, the best
Valgrind tools will be able to do is guess which function a particular
piece of code belongs to, which makes both error messages and profiling
output nearly useless. With -g, you'll get
messages which point directly to the relevant source code lines.
Another flag you might like to consider, if you are working with
C++, is -fno-inline. That makes it easier to see the
function-call chain, which can help reduce confusion when navigating
around large C++ apps. For example, debugging
OpenOffice.org with Memcheck is a bit easier when using this flag. You
don't have to do this, but doing so helps Valgrind produce more accurate
and less confusing error reports. Chances are you're set up like this
already, if you intended to debug your program with GNU gdb, or some
other debugger.
If you are planning to use Memcheck: On rare occasions, compiler optimisations (at ‘-O2’ and above, and sometimes ‘-O1’) have been observed to generate code which fools Memcheck into wrongly reporting uninitialised value errors, or missing uninitialised value errors. We have looked in detail into fixing this, and unfortunately the result is that doing so would give a further significant slowdown in what is already a slow tool. So the best solution is to turn off optimisation altogether. Since this often makes things unmanageably slow, a reasonable compromise is to use ‘-O’. This gets you the majority of the benefits of higher optimisation levels whilst keeping relatively small the chances of false positives or false negatives from Memcheck. Also, you should compile your code with ‘-Wall’ because it can identify some or all of the problems that Valgrind can miss at the higher optimisation levels. (Using ‘-Wall’ is also a good idea in general.) All other tools (as far as we know) are unaffected by optimisation level.
Valgrind understands both the older “stabs” debugging format, used by gcc versions prior to 3.1, and the newer DWARF2 and DWARF3 formats used by gcc 3.1 and later. We continue to develop our debug-info readers, although the majority of effort will naturally enough go into the newer DWARF2/3 reader.
When you're ready to roll, just run your application as you
would normally, but place
‘valgrind --tool=tool_name’ in front of
your usual command-line invocation. Note that you should run the real
(machine-code) executable here. If your application is started by, for
example, a shell or perl script, you'll need to modify it to invoke
Valgrind on the real executables. Running such scripts directly under
Valgrind will result in you getting error reports pertaining to
‘/bin/sh’,
‘/usr/bin/perl’, or whatever interpreter
you're using. This may not be what you want and can be confusing. You
can force the issue by giving the flag
--trace-children=yes, but confusion is still
likely.
| ISBN 0954612051 | Valgrind 3.3 - Advanced Debugging and Profiling for GNU/Linux applications | See the print edition |