diff --git a/mozilla/tools/leaky/leaky.html b/mozilla/tools/leaky/leaky.html index ec91b2a715c..3cb8ca6a546 100644 --- a/mozilla/tools/leaky/leaky.html +++ b/mozilla/tools/leaky/leaky.html @@ -1,55 +1,38 @@
-- cvs checkout mozilla/tools/leaky --If there is enough demand, we can make this part of -the default SeaMonkey module. -
- ./configure --enable-leaky -+
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,
+
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-leakyTop-of-tree build should Just Build It and leaky will show up in dist/bin. -
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:
+
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:
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.
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 -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:
- 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