In addition to support for code generated by the Apex 3.0.0 C++ and Ada compilers, this release provides Apex GUI integration in the form of the Purify Viewer Edit, Debug, Check-in, Check-out, and JIT debugging features.
Miscellaneous
This release supports HP-UX 10.30, including kernel threads.
This release supports PA-RISC 2.0 object files.
This release supports the HP aCC compiler.
Three new icons have been added to allow the user to check out and check in source files within a source code repository. Each button is associated with a script to execute the appropriate command for retrieving or storing a source file. The default source repository is ClearCase but the scripts can be tailored to other systems, including RCS and SCCS.
This release contains a new utility, purela_show, which generates simplified reports from license and usage data maintained in a standard or aggregate PureLA database.
Japanese language support
This release is available with GUI support for the Japanese language. See the Internationalization section below.
Miscellaneous
Purify has been tested with HP-UX versions 9.01, 9.03, 9.04, 9.05, 10.00, 10.01, 10.10, 10.20, 10.30, and 11.00 from Hewlett Packard.
NOTE: This is the last release of Purify to support HP-UX 9.x.
Purify also supports 64-bit wide-mode programs on HPUX 11.00. A wide-mode program is one that uses 64-bit pointers, built with the compiler option "+DA2.0W."
Purify has been tested with the following compilers:
See the "Restrictions and Known Issues" section for more details.
Purify supports these threads packages:
This change is due to the dld problem below:
One known instance of this problem occurs you use getservbyname() because it loads network protocols using shl_load().
Not all programs using shl_load will experience a problem. Patches are available from HP as of 3/99 on both 11.x and 10.20.
The patch numbers are:
PHSS_17225 for 10.20
PHSS_17571 for 11.00
IMPORTANT NOTE FOR aCC USERS: PHSS_17225 does not replace the dld that ships with aCC. This is an oversight. If your instrumented aCC compiled programs hang the aCC dld has the problem that this patch fixes. Rational has verified with HP that replacing aCC's dld with the patched /usr/lib/dld.sl is appropriate:
% cd /usr/lib/aCC
% mv dld.sl dld.old.sl
% ln -s /usr/lib/dld.sl .
-lazy-dld-maps=1.
Release 5.0 supports both 32- and 64-bit development. "Wide" mode, or 64-bit applications are those compiled with the +DA2.0W option - apps using 64-bit pointers. "Narrow" mode applications are traditional 32-bit programs.
Purify ships in 2 configurations, one supporting wide mode and the other supporting narrow. Both can be installed on the same file system, but the 64-bit version can only be used on 64-bit HP-UX 11.x systems.
If both install directories are in your path, Purify will auto-select the correct wide or narrow mode version, in most situations (see below for limitations). For example, you can install two versions of Purify:
purify-5.0-beta-H1-hpux (32-bit)
purify-5.0-beta-P1-hpux (64-bit)
(Beta and proto release with H<n> in their name are 32-bit release. P<n> signifies a 64-bit release.)
Or, for a final release:
purify-5.0-hpux (32-bit)
purify-5.0-hpux64 (64-bit)
If the two install directories are in your path, then running "purify" will automatically select the correct version, based on the type of program you are linking. The same is true for Quantify.
Even if only one install directory is on your path, auto-selection will occur if both versions are properly installed: Running pure_install on each version will prompt you for the location of the other product.
If you already have your licenses installed and do not choose to run pure_install, you can set up this connection between the two install directories by running the script "pure_link_32_64" in each install directory:
% cd purify-5.0-hpux
% pure_link_32_64
<answer the questions>
% cd purify-5.0-hpux64
% pure_link_32_64
Auto-selection only works between 32- and 64-bit Purify from 5.0 onwards.
In some situations, auto-selection does not have enough context to tell which version (32 or 64-bit) you need. This is true for the options:
% purify -ptr64 -test-license
% quantify -ptr64 -printhomedir
% purify -ptr32 -version
% quantify -ptr32 -help
Failure to include -ptr<32|64> in these cases may yield the wrong information. For example, you may get the product home directory for the 32-bit product when you wanted the 64-bit product.
These options are NOT necessary during normal instrumentation and viewing operations:
% purify cc -g -o foo foo.o
% quantify -view my_app.qv
If you attempt to use the 64-bit Purify using -ptr64, or by having it on your PATH first, on a non 11.x systems, execution will fail. It only runs on HP-UX 11.x and later.
Because of a defect in auto-selection, auto-selection does not occur when using "-nolink". You must use -ptr64 or -ptr32 to ensure the correct version is used:
% quantify -nolink ld mylib.a
"+nodynhash"option is not recognized. You should obtain a newer linker from HP. This option is support by 64-bit linkers from 07-Jan-1999 and later.
You may also workaround this problem by include the following in your PUREOPTIONS environment variable:
-force-no-dynhash=no
The default setting of this option (to "yes") is used to workaround an HP bug in newer linkers.
b *purify_stop_here
When you stop at purify_stop_here in the debugger, the debugger's stack trace will not be correct: You won't see the stack trace for you program, only for Purify's runtime libraries.
The easiest way to get around this is to set a temporary breakpoint at the address which is in register r15 using this wdb command:
tb *$r15
Then, you can use the "continue" command to stop in your program at the instruction that caused the Purify error report.
Error: Child process exited with status = 1.
This is caused by an 'ar' failure in this locale. A workaround is to unsetenv LANG before instrumenting.
(/usr/vue/bin/vuepad),the edit button will be unable to position the editor window to the correct line. This is a vuepad limitation.
The workaround is to use a more capable editor.
! Ignore the NumLock and ScrollLock keys on
! mouse buttons
Purify*ignoreModifierMask: Mod3|Mod2
This second workaround will take effect for a new Purify viewer after you restart your X-session or run a command like
'xrdb -merge $HOME/.Xdefaults'.
The site-wide URL for ClearQuest can be given during installation or set by manually editting the file
pure_clearquest_url
in your Purify home directory. A user can override the site-wide URL by setting the environment variable
PURE_CLEARQUEST_URL
This feature is partly implemented by a shell script, ("pure_invoke_clearquest" in your Purify home directory) to allow you to tailor its operation to your needs. If you wish, you may copy and customize this script. As long as the directory containing the script appears in your search path before your Purify home directory, it will be used instead of the original script
If you prefer to use Purify with ClearDDTS, you can do so by setting the X resource
Purify*ddtsCommandString
to 'xddts', if xddts is in your search path, or to the full path to your xddts executable. xddts is invoked by a shell script ("pure_invoke_ddts" in your Purify home directory). If you wish to customize it, please read the section on customizing "pure_invoke_clearquest" above.
If you already have a customized "pure_invoke_ddts" script in your search path, All you need to do is set your X resource as described above, and Purify will find your customized script automatically.
The following copyright applies to portions of this ClearQuest integration code:
Copyright 1996 Netscape Communications Corporation, all rights reserved. Created: Jamie Zawinski <jwz@netscape.com>, 24-Dec-94. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
To avoid this kind of problem, you should run your application on a different X server than the Purify UI or Purify stderr output, or you should use the -log-file= or -view-file= options to specify a file to capture messages for inspection after your application is finished.
A convenient way to debug on two displays is to pre-start the Purify Viewer on one display ("slave"), and then start the application on the other display ("master"):
% purify -display slave:0 -view a.out.X & % a.out.X -display master:0The two commands must be executed on the same computer, but it could be the workstation associated with either display, or altogether another computer remote from both displays.
The application will connect to the already started Purify Viewer, and messages will not conflict with the X display interactions of the application under test.
XDB & Softdebug
Wait...loading shared-library map tables. xdb panic: Mapped addresses for dld overlap text segment for dld
There is a simple workaround for this problem and we've implemented it in the shell script <purifyhome>/purify_xdb. Whenever you use xdb on an instrumented program use this script to invoke xdb.
DDE - Distributed Debugging Environment
prop system -on alias `after_debug delete intercept signal SIGCHLD; \ prop system -off; \ breakpoint -in main -entry -exit; \ go
Attaching to a running process
JIT debugging may fail to attach to your application if the executable resides on an NFS file system mounted without the "nointr option. The HP Debugger reference manual says:
"If you get a Permission denied error message when you attach to a running process, it is likely that you are running either the debugger or the target process over an NFS link and that the relevant file system is mounted with the default intr option. You must mount the file system with the nointr option to resolve this problem. Use a command like the following to mount the file system containing the debugger:
mount -o nointr[,other_options] \ system:/opt/langtools /toolsUse a command like the following to mount the file system containing the target process:
mount -o nointr[,other_options] \ system:/test_area /testIt is probably easier to create an auxiliary mount for the file system than to unmount and remount it."
Purify does not support a type of relocation information known as "old style fixups". These were generated by HP-UX system software before release 3.0. If Purify detects old style fixups the message:
Object file has incompatible format (may be older than HPUX 3.0)
is generated. We have seen this problem with HP's libsql.a and some of Oracle's Oracle6 libraries.
There is a simple workaround. Given a problem object module (or modules) the workaround is t have /bin/ld build a new object module. Suppose the old object modules are called `foo.o' and `bar.o'. Issuing the command:
% ld -r -o new_foo.o foo.o
% ld -r -o new_bar.o bar.o
or
% ld -r -o foo_and_bar.o foo.o bar.o
would generate a new object module where the old style fixups have been removed.
In the case of an archive file the following script will create a new archive given the full pathname of the original:
#!/bin/sh
# Remove old fixups from an archive.
# Supply original .a name as first argument.
cd /tmp
lib=new_`basename $1`
ar x $1
rm -f $lib
for member in `ar t $1` ; do
ld -r -o _$member $member
ar q $lib _$member
rm $member _$member
done
echo Created `pwd`/$lib
General Limitations
!!! Unable to write Lines to Offset Mapping: CONSTRAINT_ERROR
The compiler will fail to generate source information for the associated Ada file that is consumable by Purify Apex, Quantif Apex, and PureCoverage Apex. In this case, no source annotations or line level coverage and performance data will be available for functions in the affected file.
Debugging
For example, if you are using package Puretools.Purify in your application, then you can use the following debugger command:
>p Puretools.Purify.What_Colors (my_address, nbytes)
If you are not using the Ada wrappers in your code, then you would invoke:
>p purify_what_colors (my_address, nbytes)
The C function names and signatures are available in the C/C++ reference sections for each tool. See Help:Manuals:Rational Apex/Pure Integration Manuals.
Using rcc/RCC directly