From c2c9a9c0b6e0b41b12883984ca37b8ae63ba2adc Mon Sep 17 00:00:00 2001
From: "kipp%netscape.com"
Leaky is a program which will help you find memory leaks, and as of
+late, help you debug reference count problems with xpcom objects.
+ Get the Source
+ Leaky is not currently part of the default SeaMonkey module,
+ Building it
+ By setting the Using Leaky
+ After it has been built, you can use TestPreload and TestMalloc and
+ShowLibs to debug your implementation.
+ By setting the LIBMALLOC_LOG environment variable you control
+how much information is logged during the programs execution. See libmalloc.h
+for a definition of the values to use. If you are using LD_PRELOAD,
+here is one way to run your program:
Once your program has completed execution you can use leaky to look
@@ -60,15 +43,20 @@ Leaky will then display all of the call sites where memory was leaked.
To look at the entire log file contents, not just the leaks add "-a" to
the arguments:
-Leaky is a program which will help you find memory leaks, and as of late,
-help you debug reference count problems with xpcom objects.
-
+
-Leaky is not currently part of the default SeaMonkey module,
-you will need to explicitly pull the source:
-
-
- cvs checkout mozilla/tools/leaky
-
-If there is enough demand, we can make this part of
-the default SeaMonkey module.
-
-
-
-
-Building it
-
-
- ./configure --enable-leaky
-
+
you will need to explicitly pull the source:
+
+ cvs checkout mozilla/tools/leaky
+If there is enough demand, we can make this part of the default SeaMonkey
+module.
+
+ ./configure --enable-leaky
Top-of-tree build should Just Build It and leaky will show up in dist/bin.
-
-
-
-
-
-Using Leaky
-
-
-After it has been built, you can use TestPreload and TestMalloc and ShowLibs to
-debug your implementation.
-LIBMALLOC_LOG environment variable you control how much
-information is logged during the programs execution. See libmalloc.h for
-a definition of the values to use. If you are using LD_PRELOAD, here is
-one way to run your program:
+env LD_PRELOAD=/full/path/to/libleaky.so LIBMALLOC_LOG=1
my-program
-The debugging malloc library creates two files, malloc-log and malloc-map.
+The debugging malloc library creates two files, malloc-log and
+malloc-map.
The malloc-log file can be quite large for large programs (e.g. mozilla)
so be prepared to have alot of disk space. The malloc-map is tiny.
leaky -d -a <program-name-goes-here> malloc-log
-For debugging reference count issues, here is what I do:
+For debugging reference count issues, here is what I do:
-
+
(gdb) p DumpAddressMap()
-
+
(gdb) p DumpAddressMap()
-
+
leaky -d -a <program-name-goes-here> malloc-log > log
-
leaky -d -a <program-name-goes-here> malloc-log > log
-Leaky now has a "graph" output option. If you do this:
- leaky -gqx <program-name-goes-here> malloc-log | c++filt | sed -e 's/&/&/g' > /tmp/GQ0.html-
Then leaky will make a graph of the leaks [-g] and output that graph -in xml format (currently actually html...) [-x]. I use c++filt to -translate the C++ mangled names into ascii and then use sed to make it -legitimate html and off it goes to a file.
+
Leaky now has a "graph" output option. If you do this:
+
leaky -gqx <program-name-goes-here> malloc-log | sed -e 's/&/&/g' > /tmp/GQ0.html+Then leaky will make a graph of the leaks [-g] and output that graph in +xml format (currently actually html...) [-x]. I use sed to make it legitimate +html and off it goes to a file. +
If you throw file at viewer (recursion is cool) then it will present +you with a treeview of the leaks that you can click on to open/close sections. +Enjoy! +
Command Line Options
+
+
| -a | -dump the entire log. This means all malloc's, free's, new's, delete's, +addref's or release's will be displayed | +
| -d | - -Porting to non-Intel/Linux -dump leaks (only one of -d, -R or -g can be used at a time) | +
| -R | + +dump refcnts | +
| + + | + |
| -g | + +display a graph of leaks | +
| -x | + +when displaying the graph with -g, use html output that can be fed +into an html4+css+dom compliant viewer (like mozilla :-) | +
| -r symbol | + +define a root for the graph dump. nodes in the graph above symbol will +be hidden, thus reducing the depth of the graph making it easier to find +deeper leaks. | +
| + + | + |
| -e symbol | + +exclude leaks that include symbol from treatment | +
| -i symbol | + +include leaks that include symbol for treatment. If an includes are +defined than only leaks which include the symbols will be processed. excludes +will still apply to this reduced set of leaks | +
| + + | + |
| -A | + +show the address in the stack crawls, not just the symobls | +
| -h num | + +set the size of the hash buckets used by leaksy dictionaries to <num> | +
| -s depth | + +set the depth of the stack crawls shown when displaying stack crawls +(any of the dumping modes except -g) | +
| -q | + +make leaky quiet (don't dump the information about symbols being read +and from which libraries) | +
Porting to non-Intel/Linux
+
+
Initial version works only on x86 linux. To work on other platforms +you will need to:
CrawlStack() in libmalloc.cppDumpAddressMap() in libmalloc.cpp and in ShowLibs.cpp