home *** CD-ROM | disk | FTP | other *** search
- Purify (tm) and Quantify (tm) are commercial software quality
- assurance tools available from Rational Software Corporation
- <http://www.rational.com/>. Purify is essentially a memory access
- verifier and leak detector; Quantify is a C level profiler. The rest
- of this file assumes you generally know how to use Purify and
- Quantify, and that you have installed valid licenses for these
- products. If you haven't installed such licenses, you can ignore the
- following since it won't help you a bit!
-
- You can easily build a Purify or Quantify instrumented version of the
- Python interpreter by passing the PURIFY variable to the make command
- at the top of the Python tree:
-
- make PURIFY=purify
-
- This assumes that the `purify' program is on your $PATH. Note that
- you cannot both Purify and Quantify the Python interpreter (or any
- program for that matter) at the same time. If you want to build a
- Quantify'd interpreter, do this:
-
- make PURIFY=quantify
-
- When running the regression test (make test), I have found it useful
- to set my PURIFYOPTIONS environment variable using the following
- (bash) shell function. Check out the Purify documentation for
- details:
-
- p() {
- chainlen='-chain-length=12'
- ignoresigs='-ignore-signals="SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGTRAP,SIGAVRT,SIGEMT,SIGFPE,SIGKILL,SIGBUS,SIGSEGV,SIGPIPE,SIGTERM,SIGUSR1,SIGUSR2,SIGPOLL,SIGXCPU,SIGXFSZ,SIGFREEZE,SIGTHAW,SIGRTMIN,SIGRTMAX"'
- followchild='-follow-child-processes=yes'
- threads='-max-threads=50'
- export PURIFYOPTIONS="$chainlen $ignoresigs $followchild $threads"
- echo $PURIFYOPTIONS
- }
-
- Note that you may want to crank -chain-length up even further. A
- value of 20 should get you the entire stack up into the Python C code
- in all situations.
-
- With the regression test on a fatly configured interpreter
- (i.e. including as many modules as possible in your Modules/Setup
- file), you'll probably get a gabillion UMR errors, and a few MLK
- errors. I think most of these can be safely suppressed by putting the
- following in your .purify file:
-
- suppress umr ...; "socketmodule.c"
- suppress umr ...; time_strftime
- suppress umr ...; "dbmmodule.c"
- suppress umr ...; "gdbmmodule.c"
- suppress umr ...; "grpmodule.c"
- suppress umr ...; "nismodule.c"
- suppress umr ...; "pwdmodule.c"
-
- This will still leave you with just a few UMR, mostly in the readline
- library, which you can safely ignore. A lot of work has gone into
- Python 1.5 to plug as many leaks as possible.
-
- Using Purify or Quantify in this way will give you coarse grained
- reports on the whole Python interpreter. You can actually get more
- fine grained control over both by linking with the optional `pure'
- module, which exports (most of) the Purify and Quantify C API's into
- Python. To link in this module (it must be statically linked), edit
- your Modules/Setup file for your site, and rebuild the interpreter.
- You might want to check out the comments in the Modules/puremodule.c
- file for some idiosyncrasies.
-
- Using this module, you can actually profile or leak test a small
- section of code, instead of the whole interpreter. Using this in
- conjuction with pdb.py, dbx, or the profiler.py module really gives
- you quite a bit of introspective power.
-
- Naturally there are a couple of caveats. This has only been tested
- with Purify 4.0.1 and Quantify 2.1-beta on Solaris 2.5. Purify 4.0.1
- does not work with Solaris 2.6, but Purify 4.1 which reportedly will,
- is currently in beta test. There are funky problems when Purify'ing a
- Python interpreter build with threads. I've had a lot of problems
- getting this to work, so I generally don't build with threads when I'm
- Purify'ing. If you get this to work, let us know!
-
- -Barry Warsaw <bwarsaw@cnri.reston.va.us>
-