Download pdf Format
Transcript
Once the Purify and Quantify tracks were built and running correctly, our next goal was to make the system easier to use. The typical complaints we received from developers and testers included: ● ● ● There was constant instrumentation of the shared libraries. Quantify output on one HP hardware system did not match the next developer's output, which was produced on a slightly different HP system. Our internal SAS debugger would not work seamlessly with the systems. (Yes, we have our own debugger, too.) Ensuring Consistent Results on Different Machines We addressed each problem as it arose, and inconsistent results between different machines was the first problem we encountered. The differing results were caused by the fact that many different varieties of HP hardware were in use throughout the company. When tech support informed us about the -use-machine option, we chose one of the many varieties of HPUX machines installed in house and made that value the default. This option was added to the Quantify track variables that are used to build the master executable. All shared libraries and the main SAS executable are accessed from a global area on the network, so all developers now run with the same machine type; once the instrumentation of each shared library was the same for all users, we could set up a global cache for instrumented modules. We set the cache to be on the global network and added the -cache-dir option that pointed to this global area for both the Purify and Quantify builds. Finally, a postprocessing step was also added to our nightly build process to instrument each shared library after it was built and to place the instrumented image in the cache. This change allows a user to start working in the morning with up-to-date, pre-instrumented images. The user no longer has to watch as each shared library is loaded and instrumented on the first run each day. Stopping at Breakpoints When Running SAS with Purify Another problem was that developers were unable to set breakpoints in our debugger when running a Purified or Quantified version of the SAS System. They could run with the debugger and set a breakpoint on purify_stop_here, but they could not set a breakpoint in a particular shared library. This problem was caused by the fact that Purify and Quantify munge the shared library name by appending a constant string to the image name that is given to the instrumented shared library. For example, if the shared library name is sasxfs, the instrumented shared library name looks something like sasxfs_pure_q7152_420_B1020. The images loaded by the system and therefore by our debugger are the instrumented shared libraries. Our debugger did not know about this name aliasing, so we worked with the debugger developers to add a global variable that is built with the SAS System that contains the appended value. When the debugger loads SAS, it now looks for this global variable;