4 February 2002 Greetings, KDE developer. Some of you may have noticed, in recent days, that I have posted some bug reports to kde-core-devel@kde.org, containing traces like the following: Use of uninitialised CPU condition code at 0x471A4196: KateBuffer::parseBlock(KateBufBlock *) (katebuffer.cpp:446) by 0x471A3B58: KateBuffer::line(unsigned int) (katebuffer.cpp:343) by 0x471C684B: KateDocument::updateLines(int, int) (../../kdecore/ksharedptr.h:126) by 0x471C1C3E: KateDocument::makeAttribs() (katedocument.cpp:2302) These errors were detected using this tool, Valgrind. The purpose of this small doc is to guide you in using Valgrind to find and fix memory management bugs in KDE3. --------------------------------------------------- Here's a getting-started-quickly checklist. It might sound daunting, but once set up things work fairly well. * You need an x86 box running a Linux 2.4 kernel, with glibc-2.2.X and XFree86 4.1.0. In practice this means practically any recent, mainstream Linux distro. Valgrind is developed on a vanilla Red Hat 7.2 installation, so at least works ok there. I imagine Mandrake 8 and SuSE 7.X would be ok too. It has been known to work (and still should) on Red Hat 7.1 and 6.2 too. * You need a reasonably fast machine, since programs run 25-100 x slower on Valgrind. I work with a 400 MHz AMD K6-III with 256 M of memory. Interactive programs like kate, konqueror, etc, are just about usable, but a faster machine would be better. * You need at least 256M of memory for reasonable behaviour. Valgrind inflates the memory use of KDE apps approximately 4-5 x, so (eg) konqueror needs ~ 140M of memory to get started. This is very bad; I hope to improve it (the current memory manager has a design problem). * You need to compile the KDE to be debugged, using a decent gcc/g++: - gcc 2.96-*, which comes with Red Hat 7.2, is buggy. It sometimes generates code with reads below %esp, even for simple functions. This means you will be flooded with errors which are nothing to do with your program. As of 18 Feb 02, you can use the --workaround-gcc296-bugs=yes flag to ignore them. See the manual for details; this is not really a good solution. - I recommend you use gcc/g++ 2.95.3. It seems to compile KDE without problems, and does not suffer from the above bug. It's what I have been using. - gcc-3.0.X -- I have not really tried gcc 3.0.X very much with Valgrind, but others seem to think it works ok. It's ok to build Valgrind with the default gcc on Red Hat 7.2. * So: build valgrind -- see the README file. (it's easy). * Build as much of KDE+Qt as you can with -g and without -O, for the usual reasons. * Use it! /path/to/valgrind $KDEDIR/bin/kate (or whatever). * If you are debugging KDE apps, be prepared for the fact that Valgrind finds bugs in the underlying Qt (qt-copy from CVS) too. * Please read the Valgrind manual, docs/index.html. It contains considerable details about how to use it, what's really going on, etc. * The source locations in error messages can be way wrong sometimes; please treat them with suspicion. In particular, it will sometimes say that a source location is in a header file (.h) when really it is in some totally unrelated source (.cpp) file. I'm working on it ... * There are some significant limitations: - No threads! You can run programs linked with libpthread.so, but only until the point where they do clone(); at that point Valgrind will abort. - No MMX, SSE, SSE2 insns. Basically a 486 instruction set only. - Various other minor limitations listed in the manual. * Valgrind is still under active development. If you have trouble with it, please let me know (jseward@acm.org) and I'll see if I can help you out. Have fun! If you find Valgrind useful in finding and fixing bugs, I shall consider my efforts to have been worthwhile. Julian Seward (jseward@acm.org)