third man page on DigitalUNIX

Man page or keyword search:  
man Server   12896 pages
apropos Keyword Search (all sections)
Output format
DigitalUNIX logo
[printable version]

third(1)							      third(1)

NAME
       third  -	 Third Degree: heap usage and leak profiler, and memory-access
       error checker for C and C++ programs.

SYNOPSIS
       third [-pthread] [-fork] [-invalid] [-uninit heap+stack+...]  [-hide n]
       [-g] [option...] program [argument...]

       See  the start of the OPTIONS section below for details of Third Degree
       options that may be essential for the correct execution of the program.

       The atom -tool third interface is still	available,  for	 compatibility
       with  earlier releases. However, it is now undocumented, and it will be
       retired in a future release.

DESCRIPTION
       See prof_intro(1) for an introduction to	 the  application  performance
       tuning tools provided with Tru64 UNIX.

       Third  Degree (third) creates an instrumented version of a debuggable C
       or C++ program (naming it program.third) that, by default,  produces  a
       log file of stack traces for places where heap memory was allocated and
       subsequently leaked during a test run of the instrumented program.

       If you specify program arguments (argument...)  or  -run,  the  instru‐
       mented  program	is executed also. If you specify -display, more is run
       afterwards to display the log file.  If the program name is omitted,  a
       usage message is printed.

       For  example,  to  instrument,  run,  and display the leaks in a multi-
       threaded program: cc -g -pthread -o program *.c third -pthread -display
       program data/*

       Specify -all or -incobj to report stack traces that lead through shared
       libraries and to check memory references made by the shared  libraries.
       Specify -hide 0 if you need to see reports of problems in code that was
       not compiled -g or -g1. Specify -g to keep debug information,  so  that
       the instrumented program can be debugged.

       To  check  for leaks at times before program exit, specify -before proc
       or -after proc, which trigger a check when the procedure proc executes.

       To check the program for access to invalid addresses within  the	 stack
       and  heap  areas,  specify the -invalid option, and see the messages in
       the log file.

       To check the program for reading variables that have not been  initial‐
       ized,  specify the -uninit option with a value of at least heap, stack,
       or heap+stack.  This option may cause the instrumented program to  mal‐
       function,  because  it poisons all uninitialized memory with an unusual
       value -- 0xfff8a5a5. This can be used to advantage by  running  regres‐
       sion  tests  on the instrumented program and comparing its results with
       those that were expected.  Use the -quiet option to suppress the	 usual
       informational messages, or just manually run the program.third file for
       each test after instrumenting it once (for example,  without  the  -run
       option  or  program  arguments):	 third -quiet program -uninit h+s -inv
       program data/* | diff benchmark -

       The pixie -testcoverage command can be used to list which source	 lines
       were not exercised (and therefore not checked) by the regression tests.

       An  alternative display technique for -invalid and -uninit errors is to
       give the log file to emacs as if	 it  contained	compiler  diagnostics.
       This enables emacs to place its cursor on the source line referenced by
       each error message in turn:

       xemacs		   (run xemacs in  working  directory)	ESC-x  compile
	     (or   click   the	 "Compile"   button   in   xemacs)   cat  pro‐
       gram.3log    (changed from "make -k") CTL-x `		 (place cursor
       on code for next error - repeat)

OPERANDS
       File  name  of a fully linked call-shared or nonshared executable to be
       profiled. This program should be compiled with the -g or -g2 option  to
       obtain  the  most  complete  error  reports and profiles.In particular,
       errors in code compiled with the default -g0  option  are  usually  not
       reported	 unless	 the  -hide  0	option is specified, and line numbers,
       static procedure names, and file names are  unavailable.	  If  -g1  was
       used,  variable	names are unavailable. Inlined procedures are not dis‐
       played separate from their callers, so they are	best  avoided.Programs
       that  are  stripped  or	are  optimized by spike or cc -om are not sup‐
       ported.	All arguments following the program name are considered to  be
       arguments needed by the instrumented program to execute the procedures,
       lines, and instructions of interest. Multiple arguments can  be	speci‐
       fied. They imply -run if any are specified, and they can be replaced by
       -run if none are needed.

OPTIONS
       Options can be abbreviated to three characters, option  keyword	values
       to one.

   Essential Options
       Some  or all of these options may be needed to prevent the instrumented
       program from malfunctioning: Specify -pthread if the program or any  of
       its  libraries  calls pthread_create(3), for example if it was compiled
       with either the -pthread option or the -threads	compatibility  option.
       This  will  make	 the log file reporting thread-safe.  Specify -fork if
       the program calls any variant of fork(2). It is not usually  needed  if
       the  subprocesses  also	call  any variant of exec(2). The -fork option
       ensures that forked multi-threaded programs are profiled in  a  thread-
       safe  way,  and	it  produces separate log files for the forked subpro‐
       cesses, including the process id in their file names as	if  -pids  was
       specified.  Failure  to	use -fork might lead to deadlock in the forked
       child processes.	 The heap space for  the  program  being  analysed  is
       located	at  the	 usual	address,  immediately  following the program's
       static data. By default, any heap space needed by Third	Degree's  run-
       time  analysis  code  is	 located  separately,  starting at the address
       38000000000. If the program needs to use this address range, use -heap‐
       base to tell third to use memory at a specific hexadecimal address (for
       example, 10000) or taso for the default 31-bit address (if the  program
       was linked with the -taso option).  By default, third memory maps large
       areas between address 3c000000000  and  3ff00000000.   If  the  program
       needs  to  use this address range, use -mapbase to specify what address
       (for example, 10000) third can map.  Disables third's handling of  sig‐
       nals SIGILL, SIGTRAP, SIGABRT, SIGEMT, SIGFPE, SIGBUS, SIGSEGV, SIGSYS,
       SIGXCPU, and SIGXFSZ. Also disables reports of reentrant calls to  heap
       management routines (malloc, free, and so on) from signal handlers; may
       avoid deadlock in applications that make significant use of signal han‐
       dlers.  This  option can not be used with the -before or -after options
       for leak detection and heap tracing.

   File Generating Options
       Does not print informational and	 progress  messages  on	 the  standard
       error  stream.  Prints the command lines used to instrument the program
       and to execute the instrumented program.	 Names the  instrumented  pro‐
       gram  file  instead of the default program.third.  Specifies the direc‐
       tory to which the instrumented program writes the log file(s) for  each
       test  run.   The default is the current directory.  Adds the process-id
       of the instrumented program's test run to the name of the log file pro‐
       duced  (that  is, program.pid.3log). By default, the file is named pro‐
       gram.3log, but the process-id is always included for the log  files  of
       forked subprocesses.

   Stack-Trace Generating Options
       Searches	 for  source  files  in	 the specified directory when printing
       their names in stack traces in the log file.  When distinguishing  dif‐
       ferent  heap  allocation	 calls, considers only the top n procedures on
       the program's call stack--for example, when memory is  allocated	 by  a
       common  procedure  that	is  called  by many others.  The default stack
       depth is 200.  Controls the degree to which error  reports  for	system
       libraries  and  other  non-debuggable  code  are	 hidden	 (that is, not
       printed). By default, n=2, so errors in code compiled with -g0 are  not
       reported	 unless	 one of the next two stack frames has debuggable code.
       Values of n>2 request printing of  errors  deeper  into	non-debuggable
       code. Use -hide 0 to request that all errors be printed, if you need to
       debug code that was compiled with -g0, but note that this may  yield  a
       large  number  of  spurious  errors  for system library routines (which
       should be ignored).

   Heap History Options
       Displays the usage of each  block  of  memory  allocated	 in  the  heap
       (grouped	 by  similar allocation-site stack trace). Each 32-bit word of
       the first 1024 bytes is classified as one of the following: never writ‐
       ten,  always  zero,  a  pointer,	 sometimes a pointer, or non-zero non-
       pointer.	 Classifies the first n bytes of each heap object, instead  of
       the 1024 bytes selected by the -history option.

   Leak Detection and Heap Tracing Options
       Cancels	the default -blocks new -after exit heap scan.	Specifies that
       each of the following -before or -after options	will  trigger  a  heap
       scan  that  will	 print	the stack trace of the allocation of: (1) each
       heap leak--a heap block that is no  longer  referenced  by  any	active
       stack variable, static variable, or non-leak heap object; (2) each heap
       object--a heap block that has not been deallocated but is still	refer‐
       enced.

	      Leak  reports  also distinguish leaks that are not referenced by
	      other leaks. They are often the root of a tree or otherwise  the
	      cause of many other leaks.

	      Reports of new leaks or objects include only those that occurred
	      since the last scan.

	      The alternative options -leaks new|all and -objects new|all  can
	      be  used	to  select  reports of just leaks or just objects, but
	      note that Third Degree may not distinguish  between  the	refer‐
	      enced and unreferenced heap blocks reported by -blocks appropri‐
	      ately for some applications.  Specifies that each of the follow‐
	      ing  -before  or -after options will trigger a heap scan every n
	      calls to the named procedure, instead of	the  default  n	 =  1.
	      Triggers	a  heap	 scan  at  calls  to (-before) or returns from
	      (-after) the procedure proc, of the type	defined	 by  the  last
	      -blocks,	-leaks,	 or  -objects  option,	and  of	 the frequency
	      defined by the last -every option. If the named procedure is  in
	      a	 shared	 library, that shared library must be instrumented for
	      the scan to be triggered. Specify -all or -incobj to  instrument
	      the  shared library; but note that, in a multi-threaded program,
	      -after exit is the only trigger possible for system library pro‐
	      cedures, because libpthread and the libraries it uses are always
	      excluded from instrumentation.  See the -ignore option  for  use
	      of  the  wildcard character (*) in the procedure name.  Leaks or
	      objects that comprise less than the specified percentage (%)  of
	      the  total leaked or allocated heap will be reported as a single
	      subtotal, instead of being described individually.  The  default
	      is  1.0  During a heap scan, words of memory will be masked with
	      the  specified  hexadecimal  value  addr	before	being  matched
	      against  the  existing  address ranges of heap objects, to allow
	      for non-address information being	 encoded  in  unused  bits  of
	      pointer  values.	The  default mask is ffffffffffffffff, meaning
	      the whole value is used.

   Heap Management Options
       The last n bytes of freed heap objects are kept in a queue  instead  of
       being  returned	to  the	 heap's free pool, as a means of trapping code
       that accesses  heap  memory  after  it  has  been  freed.  By  default,
       1,000,000 bytes of freed objects are kept in this queue.

	      If  the  program	allocated  memory blocks larger than a million
	      bytes, the -free option should specify a size  larger  than  the
	      largest  block  to  ensure  complete  reporting  of deallocation
	      errors.  Adds n bytes of memory to the  end  of  each  allocated
	      heap  object,  so	 that  the  -invalid option can report overrun
	      errors. The default padding is 16 bytes.

   Memory Access Error Debugging Options
       Runs the instrumented program under the control of  the	dbx  debugger,
       instead	of  simply  executing it. Usually, the procedure names, source
       file names, and line numbers in the log file are sufficient to show the
       location	 of  a memory access error.  However, if the procedure was not
       instrumented, no report can be printed in the log file; and if the pro‐
       cedure  was not compiled -g, the relevant variable name, file name, and
       line number can not be printed. In these cases,	the  debugger  can  be
       used  to examine further - for example, to look for the poisoned memory
       values in variables and registers after a segmentation fault.

	      This option implies the -leaks cancel option, and if any -before
	      and  -after  options  are	 specified,  dbx  will ignore SEGV, so
	      checking for leaks in separate non-debugging test runs is recom‐
	      mended.

	      The  ladebug  debugger can also be run on a program instrumented
	      with -g, if it is installed on the system.  Reports any  attempt
	      to  access  memory in a heap or stack area that is out of bounds
	      for application code. For example, the heap's free space data or
	      reserved	parts  of a stack frame. Addresses that are not in the
	      stack or heap (for example,  memory  mapped)  are	 not  checked.
	      Reports  any attempt to read memory in a heap or stack area that
	      has not previously been initialized by application  code	or  by
	      calloc.  Note  that  this	 feature poisons all heap and/or stack
	      memory (as selected) with the value fff8a5a5, which will cause a
	      SEGV signal if used as a pointer or a NaN exception if used as a
	      floating point number, and which is likely to cause the  program
	      to  malfunction  otherwise.   The problem in the program must be
	      corrected	 before	 third's  analysis  can	 continue.  The	 error
	      reports  in  the	log file and the -g option can help locate the
	      cause of the problem. The cc -trapuv command  offers  a  similar
	      but simpler capability for stack variables, without the need for
	      instrumentation.

	      The option value's keywords, described below, can be abbreviated
	      to one letter. They must be separated by a “+” sign: To indicate
	      which areas need to be checked.  For warnings on every line of a
	      procedure that uses an uninitialized data value, instead of just
	      on the procedure's first use of it. Each execution  of  a	 given
	      line  is	still  reported	 only once.  For warnings on the first
	      access to the uninitialized memory, instead of on the first com‐
	      putation	that  uses  it	(which	may follow several copy opera‐
	      tions).  Changes the value used for poisoning from 0xfff8a5a5 to
	      the  specified hexadecimal value.	 Tells third to disregard mem‐
	      ory errors (if  error-code  is  represented  by  a  three-letter
	      mnemonic,	 or  an asterisk, or if none is specified) or leak and
	      object reports (if error-code is represented by leaks,  objects,
	      or  blocks)  for	a  specific  procedure (proc). Optionally, the
	      location of the error can be further qualified by	 specifying  a
	      program  or  shared library (obj), source file (file), procedure
	      (proc), or source line (line). The three-letter mnemonic	error-
	      code  can	 be found at the start of all error reports in the log
	      file. The obj, file, and proc can contain a  wildcard  character
	      (*)  to  match  any  number of characters. If the procedure name
	      contains the character “*”, the latter must be escaped with “\”.
	      C++ procedures can omit the argument type list, though this will
	      match all overloaded procedures with that	 name.	 To  select  a
	      specific	procedure, specify the full symbol name (as printed by
	      the nm command). Symbol names containing spaces, *,  and	so  on
	      must be quoted. If a “blocks” error-code is specified, both leak
	      and object reports will be supressed.

	      Examples:

	      Ignore “read uninitialized heap” memory error in procedure  main
	      of   program   program  in  source  file	main.c:	 -ignore  pro‐
	      gram^main.c^main ruh

	      Ignore the same error in	procedure  memcpy  of  shared  library
	      libc.so: -ignore libc.so^^memcpy ruh

	      Ignore “read invalid heap” memory error in procedure cat located
	      on line 6 of source file main.c: -ignore main.c^cat rih line 6

	      Ignore “read invalid heap” memory errors in procedure cat	 found
	      on any source line: -ignore cat rih

	      Do  not report leaks if one of the stack trace entries points to
	      procedure proc1 on line 6	 of  source  file  array.cxx:  -ignore
	      array.cxx^proc1 leaks line 6

	      Suppress	all  leak  or  object reports if the stack trace entry
	      contains references to procedure proc2: -ignore proc2 blocks

   Shared-Library Analysis Options
       These options are needed for the -before, -after, -invalid, and -uninit
       options	to  be	applied	 to shared libraries.  Analyzes all the shared
       libraries in addition to the program's executable.  If -all was	speci‐
       fied,  does  not	 analyze  the shared library lib.  Analyzes the shared
       library lib.  Searches for shared libraries in the specified  directory
       before  searching  the  default	directories. Use the same options that
       were used when linking the program with ld.

   Execution Control Options
       Executes the instrumented program, even if no arguments are  specified.
       By default, the program is just instrumented for later execution.  Exe‐
       cutes the instrumented program, and runs more on the resulting file(s).
       Prints the tool's version number.

NOTES
       If  third  finds	 any  previously  instrumented shared libraries in the
       working directory, it will reuse them if	 they  meet  current  require‐
       ments, to reduce re-instrumentation costs.

       Forked  subprocesses are analyzed if the -fork option is specified, and
       their log file contains the process-id, as if -pids had been specified.
       Errors  detected	 in  signal handlers for the top-level process and all
       subprocesses are reported in a  single  program.sig.3log	 file  if  the
       process's  primary  log file is busy. This ensures that the primary log
       files have a defined format, tbough the format of  program.sig.3log  is
       not defined when errors are reported concurrently.

       Temporary  instrumentation  files  are created in /tmp.	Set the TMPDIR
       environment variable to a different directory to create the files else‐
       where, for example in a disk partition with more space.

RESTRICTIONS
       Heap managers other than those of C and C++ are not supported.

       Third  Degree  has the following leak reporting limitations: Sometimes,
       some leaks may not be reported because old pointers were found in  mem‐
       ory.  Selecting	checks	for uninitialized heap memory may reduce this.
       Any degree of optimization will skew results, because instructions that
       the compiler considers non-essential may be optimized away.

       Third  Degree  may print warnings for apparent problems that are really
       harmless and do not need to be fixed. Such reports can be  ignored,  or
       the  -g	option can be used to check the accuracy of the report by run‐
       ning the instrumented program under the control of  the	dbx  debugger.
       If desired, the -ignore option can be used to prevent selected warnings
       being printed, in much the same way as lint(1) provides options to sup‐
       press  certain  of  its static checks. For example, third cannot always
       distinguish the following valid behavior from invalid behavior, result‐
       ing in false reports: Initialization of variables and structure members
       that are less than 32 bits in size (for example, C bit-field, char, and
       short  types).  Use of actual data whose value matches the poison value
       (0xfff8a5a5) that third uses to detect reading of  uninitialized	 vari‐
       ables.	Nonstandard  behavior  of assembler and system procedures that
       have been  highly  optimized  for  performance.	 Variable  size	 stack
       frames.

       The  procedures	in system libraries that are used by the POSIX threads
       package can not be instrumented in multi-threaded programs.

       Approximate performance estimates are as follows but will vary  accord‐
       ing  to	the  application  and the machine's CPU count, type, and clock
       rate. Third Degree instrumentation takes ~3s per Mb of program file  on
       a 500-MHz EV6 (21264) Alpha system, using ~15 Mb of memory plus another
       ~25 Mb per Mb  of  the  largest	program	 file.	Large  procedures  can
       increase	 both  time  and  memory  usage	 significantly. By default the
       instrumented files are ~1.5 Mb larger than the  originals  and  run  ~3
       times  slower,  but  adding the -invalid or -uninit option can make the
       files ~2.5 times larger and make them run ~10 times slower. The program
       executable  also	 includes data for each instrumented shared library --
       ~30% of the library size.

FILES
       Instrumented version of program produced by third.  Error log file pro‐
       duced  by  program.third.   Instrumented	 shared	 libraries produced by
       third.  Temporary file created and deleted in the current and  -dirname
       path directories.

SEE ALSO
       Introduction: prof_intro(1)

       atom(1),	 cc(1), dbx(1), dlopen(3), dxheap(1), emacs(1), fork(2), lade‐
       bug(1), ld(1), nm(1), pthread(3) (dxheap is available as an option.)

       Programmer's Guide

								      third(1)
[top]

List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net