home *** CD-ROM | disk | FTP | other *** search
/ IRIS Development Option 6.2 / IRIS_Development_Option_6.2_814-0478-001.iso / dist / WorkShop.idb / usr / relnotes / WorkShop / ch5.z.z / ch5.z / ch5
Text File  |  1996-03-14  |  118KB  |  2,839 lines

  1.  
  2.  
  3.  
  4.                                   - 1 -
  5.  
  6.  
  7.  
  8.        5.  _K_n_o_w_n__P_r_o_b_l_e_m_s__a_n_d__W_o_r_k_a_r_o_u_n_d_s
  9.  
  10.        5.1  _W_o_r_k_S_h_o_p__D_e_b_u_g_g_e_r
  11.  
  12.           +o The ability to unwind the call stack using the Call
  13.             Stack View does not work reliably. Stack traces will be
  14.             incomplete when stopped in a signal handler of a 4.X
  15.             binary running on a 5.X or a 6.X system. Returning from
  16.             the signal handler using "step into", "step over" and
  17.             "return" will not work correctly.  Similarly,
  18.             registering a signal through sigaction call with the
  19.             SA_SIGINFO flag set may cause incorrect stack traces
  20.             when stopped in the signal handler. (Incident #215151)
  21.  
  22.             Workaround:  There is no good workaround for this
  23.             problem.
  24.  
  25.           +o On 5.X, 6.0, and 6.1 systems the debugger has trouble
  26.             detecting mismatches between an executable and core
  27.             file (the problem is resolved on 6.2 systems).  If this
  28.             problem occurs, you are likely to receive an incorrect
  29.             stack trace without any warning that the core file may
  30.             not be based on the given executable. (Incident
  31.             #186347)
  32.  
  33.           +o The views that do expression evaluation, Expression
  34.             View, the Evaluate Expression dialog box, Structure
  35.             Browser, Variable Browser, Array Visualizer, and the
  36.             Debugger command line cannot yet evaluate:
  37.  
  38.                - long double (C/C++) and unsigned variants
  39.  
  40.                - real * 16 (Fortran) and unsigned variants
  41.  
  42.                - complex *32 (Fortran) and unsigned variants
  43.  
  44.             Evaluation of these types is not available at this
  45.             time.  (Incident #206313)
  46.  
  47.           +o Making an interactive function call when the target
  48.             process is sleeping in a system call will cause the
  49.             target to fault. (Incident #223601)
  50.  
  51.           +o WorkShop does not accommodate text editors other than
  52.             Source View very well.
  53.  
  54.             Workaround:  Set the _e_d_i_t_o_r_C_o_m_m_a_n_d resource in the
  55.             _a_p_p-_d_e_f_a_u_l_t_s file to your desired editor.  For example,
  56.             set _e_d_i_t_o_r_C_o_m_m_a_n_d to _w_s_h -_c _v_i +%_d to run _v_i in a _w_s_h
  57.             window. You also need to set *_u_s_e_T_o_o_l_T_a_l_k to _F_a_l_s_e.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.                                   - 2 -
  71.  
  72.  
  73.  
  74.           +o The request to kill a process which has spawned child
  75.             processes (through _f_o_r_k(), _s_p_r_o_c(), or _s_p_r_o_c_s_p()),
  76.             followed by exiting _c_v_d, may not properly terminate the
  77.             descendant processes. The descendant processes may
  78.             continue to run after _c_v_d has exited.  (Incident
  79.             #206273)
  80.  
  81.             Workaround:  Kill all of the process group members with
  82.             the Multiprocess View as opposed to using the Main
  83.             View.  If any of the descendant processes were created
  84.             through a _f_o_r_k(), you will have had to direct the
  85.             Multiprocess View to attach to _f_o_r_k()ed process (see
  86.             ``Config: Preferences'' in the Multiprocess View).
  87.  
  88.           +o The Multiprocess View is known to occasionally not
  89.             display all process group members which _c_v_d is attached
  90.             to.  One condition where this problem occurs is when
  91.             the list of processes shown by the Multiprocess View is
  92.             frequently changing in a short span of time (for
  93.             example, processes are _f_o_r_k()ed which _e_x_e_c() and exit
  94.             shortly after they start).  (Incident #244782)
  95.  
  96.             Workaround:  Use of Stop in the Multiprocess View will
  97.             cause _c_v_d to stop all process group members and the
  98.             display should change to correctly list all processes.
  99.  
  100.           +o When _c_v_d is brought up on one member of a running
  101.             shared process group (see _s_p_r_o_c(2)), _c_v_d does not
  102.             identify and attach to all of the other processes which
  103.             are members of the shared process group. If you start
  104.             up the Multiprocess View you will only see the process
  105.             you started _c_v_d on.  The correct behavior from the
  106.             Multiprocess View would be to display all members of
  107.             the shared process group.  (Incident #179940)
  108.  
  109.             Workaround:  Use ``Process: Add'' in the Multiprocess
  110.             View to manually add each member of the shared process
  111.             group to the _c_v_d process group display by Multiprocess
  112.             View.
  113.  
  114.           +o Attempts to add a process which has been removed from
  115.             Multiprocess View may fail or lead to an abort of the
  116.             Multiprocess View.  (Incident #168934)
  117.  
  118.           +o Disassembly View sometimes has problems when two or
  119.             more DSOs have overlapping text.  In such cases,
  120.             Disassembly View displays only one of the DSOs from the
  121.             set whose text overlaps. This can happen to users who
  122.             are building their own DSOs.  Unfortunately _c_v_d does
  123.             not warn the user when this type of conflict occurs.
  124.             (Incident #204024)
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.                                   - 3 -
  137.  
  138.  
  139.  
  140.           +o On attempting to locate the DSOs used by an executable,
  141.             _c_v_d uses the shell environment in which _c_v_d was
  142.             started, as opposed to the shell environment within the
  143.             Execution View.  This means that the value of
  144.             environment variables like LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH which are
  145.             used by _c_v_d may not match the values in the shell where
  146.             the executable will be run.  When _c_v_d is using the
  147.             wrong values for environment variables like
  148.             LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH, it may have trouble finding all of the
  149.             appropriate DSO symbol tables.  When _c_v_d has trouble
  150.             finding DSOs used by an executable it will display the
  151.             Library Search Path dialog to call attention to the
  152.             DSOs which could not be found. (Incidents #224125,
  153.             #236651)
  154.  
  155.             Workaround:  Use ``Admin: Library Search Path ...'' to
  156.             examine and set environment variables like
  157.             LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH which control the identification of
  158.             DSOs.
  159.  
  160.           +o Watchpoints in _c_v_d may be defined with an address and
  161.             size or an expression.  If you attempt to watch an
  162.             expression which resides on the stack (for example, a
  163.             local variable) _c_v_d will not allow definition of the
  164.             trap.  _c_v_d will only watch expressions whose location
  165.             is within a mapping other than the stack.  (Incident
  166.             #197233)
  167.  
  168.             Workaround:  If you want to watch an expression which
  169.             resides on the stack, use the expression evaluator to
  170.             find the address of the expression and create the
  171.             watchpoint using the address.  Once the expression is
  172.             deallocated, the watchpoint should be removed to avoid
  173.             any confusion when the stack address is reused for some
  174.             other purpose later on in the execution.
  175.  
  176.           +o Process group watchpoints involving expressions are not
  177.             supported well.  If you create a watchpoint with a
  178.             command like ppppggggrrrrpppp wwwwaaaattttcccchhhh <<<<eeeexxxxpppprrrreeeessssssssiiiioooonnnn>>>>, the expression is
  179.             only evaluated once on one of the process group
  180.             members.  The evaluation is used to determine the
  181.             address and size of the watchpoint, and address and
  182.             size is used to create a watchpoint on each process
  183.             group member.  This will only work correctly if the
  184.             address and size of the expression is the same for each
  185.             process group member.  There is no workaround known for
  186.             this problem.  (Incident #143367)
  187.  
  188.           +o The Trap Manager fails to properly define watchpoints
  189.             on 64-bit addresses.  The address typed in the
  190.             ``Trap:'' field is corrupted and either a watchpoint is
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.                                   - 4 -
  203.  
  204.  
  205.  
  206.             created on the wrong address or an invalid address
  207.             error is reported (_W_a_t_c_h_p_o_i_n_t _a_d_d_r_e_s_s _r_a_n_g_e _i_n_c_l_u_d_e_s _a_n
  208.             _i_n_v_a_l_i_d _v_i_r_t_u_a_l _a_d_d_r_e_s_s.).  (Incident #235635)
  209.  
  210.             Workaround: The command line interface panel in the _c_v_d
  211.             Main View can be used in place of the Trap Manager to
  212.             enter the watchpoint command.
  213.  
  214.           +o _c_v_d does not have support for weak symbols (see
  215.             Appendix A of the _C _L_a_n_g_u_a_g_e _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l).  _c_v_d
  216.             will not recognize the weak symbol name.  For example,
  217.             _c_v_d will not accept a request to trap on entry to
  218.             dlopen.  (Incident #181409)
  219.  
  220.             Workaround:  Use the "strong" symbol name in place of
  221.             the weak one.  Many weak symbols defined in libc have
  222.             corresponding "strong" symbol names which are the weak
  223.             name with a ``_'' prepended onto the front.  For
  224.             example, the "strong" symbol name for dlopen is
  225.             _dlopen.
  226.  
  227.           +o A write watchpoint may fail to fire when the write
  228.             occurs within a syscall.  For example, a write
  229.             watchpoint on one word within a buffer written by read
  230.             may fail to fire.
  231.  
  232.             Workaround:  Define the watchpoint to cover the entire
  233.             data structure as opposed to a subset of the structure.
  234.             For example, define the watchpoint over the entire
  235.             buffer being handed to read as opposed to a single
  236.             word.
  237.  
  238.           +o An attempt to step into the first call to an external
  239.             function will behave like a step over.  The first call
  240.             to an external function invokes rld to resolve the
  241.             function address.  When this occurs the request to step
  242.             into the call will look like a step over to the user.
  243.             (Incident #147302)
  244.  
  245.             Workaround: Either set the environment variable
  246.             _L_D__B_I_N_D__N_O_W to 1 in the Execution View prior to running
  247.             the program (see _r_l_d(1)) or use function entry
  248.             breakpoints.
  249.  
  250.           +o Traps placed within a parallel Fortran DO loop, created
  251.             with the C$DOACROSS compiler directive, fail to work
  252.             correctly.  Although the traps appear to be placed
  253.             correctly on 6.0 systems, the process will not stop on
  254.             the traps.  On 5.3 systems the traps cannot be placed
  255.             within the loop at all.  (Incident #20818)
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.                                   - 5 -
  269.  
  270.  
  271.  
  272.             Workaround:  On a 6.0 system _d_b_x can be used
  273.             successfully to place traps within the loop.
  274.  
  275.           +o The Fortran intrinsics _c_h_a_r, _z_e_x_t, _s_e_c_o_n_d_s, _m_a_l_l_o_c, and
  276.             _e_p are not supported.  (Incident #206293)
  277.  
  278.           +o The debugger does not understand external or intrinsic
  279.             statements in the Fortran program.  If the program has
  280.             a function by the same name as an intrinsic function,
  281.             evaluating an expression involving that function will
  282.             always cause the program function to be called.
  283.  
  284.           +o Some of the intrinsics (_s_q_r_t, _e_x_p, _l_o_g, _l_o_g_1_0, _s_i_n,
  285.             _c_o_s, _t_a_n, _a_s_i_n, _a_c_o_s, _a_t_a_n, _s_i_n_h, _c_o_s_h, _t_a_n_h) do not
  286.             give the correct results when the debugged executable
  287.             is linked with _l_i_b_m._s_o.  This is because of entry
  288.             points with similar names in _l_i_b_m._s_o.
  289.  
  290.             Workaround: Use a specific intrinsic name.  For
  291.             example, _s_i_n(_r_1) where _r_1 is real will produce
  292.             incorrect results.  On the otherhand, _d_s_i_n(_d_f_l_o_a_t(_r_1))
  293.             will give correct results, with the results being a
  294.             _r_e_a_l *_8 quantity.
  295.  
  296.           +o Stopping in the entry prologue of a function (before
  297.             the first user statement) in a Fortran program and
  298.             evaluating an expression that involves an adjustable
  299.             array or displaying an adjustable array in the Array
  300.             Visualizer will not work correctly.  (Incident #206264)
  301.  
  302.             Workaround: Step to the first user statement and
  303.             evaluate the expression.
  304.  
  305.           +o When stopped in a Fortran function/subprogram that has
  306.             alternate entry points, the debugger will not list all
  307.             the arguments of the subprogram and their values
  308.             correctly.  (Incident #164327)
  309.  
  310.           +o For global lookups, _c_v_d acts as though all DSOs are
  311.             built ----BBBB ssssyyyymmmmbbbboooolllliiiicccc.  If a process is stopped within a
  312.             DSO and the user asks _c_v_d to lookup a global variable
  313.             or function, _c_v_d will always look within the DSO before
  314.             it considers the main program or any other DSO.  In
  315.             effect, _c_v_d is acting as if each DSO has been built
  316.             with ----BBBB ssssyyyymmmmbbbboooolllliiiicccc.  (Incidents #173343)
  317.  
  318.           +o Interactive calls to inline member functions of C++
  319.             classes is not supported.
  320.  
  321.           +o There is no support for C++ overloaded operators in the
  322.             expression evaluator.  (Incident #203968)
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.                                   - 6 -
  335.  
  336.  
  337.  
  338.           +o The debugger does not have full support for C++
  339.             templates.  However, the user can stop in template code
  340.             and print the ``this'' pointer.  (Incidents #140313,
  341.             #140316, #222352)
  342.  
  343.           +o The display format for describing an array pointer
  344.             types is incorrect.  For example, an array of
  345.             double(*)[2] is expressed as double[]*.
  346.  
  347.           +o Elements of Fortran arrays with more than 6 dimensions
  348.             (or 5 dimensions, if the element type is character
  349.             string) cannot be referenced.
  350.  
  351.           +o C++ objects containing virtual base classes do not
  352.             display correctly in the expression evaluator.
  353.             (Incident #190170)
  354.  
  355.           +o _c_v_p_c_s can stack trace through assembler alternate entry
  356.             functions only when they are at the same address as the
  357.             main entry point.  Assembler functions with arbitrary
  358.             alternate entry points will produce incorrect stack
  359.             trace.
  360.  
  361.           +o When the Trap Manager is invoked, traps are
  362.             automatically loaded from the ._c_v_T_r_a_p_M_g_r file if one
  363.             exists.  However, these traps are reloaded if the Trap
  364.             Manager is closed and restarted.  (Incident #79217)
  365.  
  366.             Workaround: The Trap Manager should either be left
  367.             running or the default traps should be stored in a
  368.             different file and reloaded manually when desired.
  369.  
  370.           +o In general, when a write watchpoint fires, the write is
  371.             simulated by the debugger to show the new value before
  372.             any trap conditional is evaluated.  The four exceptions
  373.             for this case are the SC, SCD, SDL, and SDR
  374.             instructions.  (Incident #250036)
  375.  
  376.           +o A kernel bug prevents watchpoints from firing reliably
  377.             for members of share process groups (such as Power
  378.             Fortran or Power C programs).  Watchpoints work
  379.             reliably for non-shared text and data segments in each
  380.             individual process.
  381.  
  382.           +o If you stop a process through job control, the debugger
  383.             may not display an accurate status of the process, and
  384.             process control requests do not take effect until the
  385.             process is resumed through job control.  A process is
  386.             stopped through job control with <Ctrl-Z> from the
  387.             shell or when it receives one of the signals: SIGSTOP,
  388.             SIGTSTP, SIGTTIN, and SIGTTOU.  A process is resumed
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.                                   - 7 -
  401.  
  402.  
  403.  
  404.             through job control with _f_g and _b_g from the shell or
  405.             when it receives the signal SIGCONT.  If a running
  406.             process is stopped through job control, the debugger
  407.             continues to show that the process is running.  When
  408.             attaching to a process stopped through job control, the
  409.             debugger shows that the process is stopped.  (Incident
  410.             #167693)
  411.  
  412.           +o For instrumented executables (used for performance
  413.             analysis), stack frame unwinding may be incomplete when
  414.             stopped in a signal handler; the unwinding may stop
  415.             prematurely after the ``_sigtramp'' frame.  (Incident
  416.             #71307)
  417.  
  418.             Workaround: A full stack trace may be maintained by
  419.             returning past the ``_sigtramp'' frame.
  420.  
  421.           +o The demo program _j_e_l_l_o cannot be built as described in
  422.             the tutorial without the library /_u_s_r/_l_i_b/_l_i_b_g_l._s_o.
  423.  
  424.             Workaround:  This library should be installed when IRIX
  425.             is installed (eoe1.sw.gfx_lib subsystem).
  426.  
  427.           +o Processes that use the blocking capabilities as
  428.             provided by _b_l_o_c_k_p_r_o_c(2) may not terminate as expected
  429.             upon completion of a debug session.  Such processes are
  430.             left in a blocked state with a SIGKILL pending.
  431.  
  432.             Workaround:  These processes can be terminated with
  433.             _k_i_l_l(1).
  434.  
  435.           +o The modification of an inactive trap will cause the
  436.             trap to become active.  You will have to toggle the
  437.             active button next to the trap description in order to
  438.             deactivate the trap.  (Incident #190278)
  439.  
  440.           +o There is a case where the path remapping component of
  441.             WorkShop will find the wrong file.  When _c_v_d is stopped
  442.             and started multiple times, and ``Admin:Exit'' was used
  443.             to exit _c_v_d, the path remapping component will retain
  444.             entries in its Substitution Set from each debugging
  445.             session (see ``Admin:Project:Remap Paths...'').  The
  446.             path remapping component of _c_v_d is implemented as a
  447.             separate process and the ``.'' entry in the
  448.             Substitution Set refers to the directory in which the
  449.             process was started, typically the directory were the
  450.             first _c_v_d was started.
  451.  
  452.             Workaround: Use ``Admin:Project:Exit'' in place of
  453.             ``Admin:Exit''.  This will force the path remapping
  454.             process to terminate on each exit of _c_v_d.
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.                                   - 8 -
  467.  
  468.  
  469.  
  470.           +o By default the debugger will not attach to a _f_o_r_k()ed
  471.             process unless the fork occurs during an interactive
  472.             function call.  If you have used the Multiprocess View
  473.             preferences dialog to prevent a forked child from being
  474.             resumed, and you make an interactive function call will
  475.             leads to a call on fork, the child process will be left
  476.             stopped on exit from fork.  You must now use the
  477.             Multiprocess View to resume the child process.
  478.             (Incident #190308)
  479.  
  480.           +o _c_v_d may fail to recognize that a DSO source file is
  481.             newer than the DSO.  Although such a source file may be
  482.             the wrong version for the code which is executing, _c_v_d
  483.             will not issue a warning. The source of the problem is
  484.             that _c_v_d is always comparing time of last modification
  485.             for the source file against the executable when it
  486.             should be comparing against the DSO.  (Incident
  487.             #181297)
  488.  
  489.           +o Fortran COMMON block members that are at an offset
  490.             greater than 8 Megabytes from the start of the common
  491.             block will not be evaluated correctly in an expression.
  492.  
  493.           +o When using the Switch Process dialog to attach to an
  494.             existing process, don't attach to one of the CaseVision
  495.             or WorkShop processes (e.g. _c_v_p_a_t_h_R_e_m_a_p, _c_v_m_a_i_n) or the
  496.             environment may hang. Should this happen, kill the
  497.             _c_v_m_a_i_n process and start over.
  498.  
  499.           +o Occasionally, _c_v_m_a_i_n will dump core at startup if you
  500.             have an executable with a mismatched core file and your
  501.             NetLS license is within 90 days of expiring.  If this
  502.             happens, restart _c_v_d.
  503.  
  504.           +o The request to print the content of a very large data
  505.             structure (such as an array) from within the main
  506.             window's command line interface panel may lead to an
  507.             abort of _c_v_d.  (Incident #227980)
  508.  
  509.             Workaround:  The Array Browser may be used to display
  510.             very large arrays.
  511.  
  512.           +o The main window's command line interface panel will
  513.             only display the first 100 elements of an array.  There
  514.             is no way to change this behavior.  (Incident #250028)
  515.  
  516.             Workaround:  The best way to examine an array is the
  517.             Array Browser.
  518.  
  519.           +o With an executable built with the DCC compiler,
  520.             attempts at retrieving symbolic information about
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.                                   - 9 -
  533.  
  534.  
  535.  
  536.             _o_s_t_r_e_a_m may lead to an abort of _c_v_p_c_s.  Entering the
  537.             command wwwwhhhhaaaattttiiiissss oooossssttttrrrreeeeaaaammmm in _c_v_d will lead to such an
  538.             abort.  (Incident #239838)
  539.  
  540.           +o The _c_v_p_c_s component of _c_v_d is known to abort on very
  541.             large COFF format executables. (Incident #244495)
  542.  
  543.           +o The command line interface panel in the _c_v_d Main View
  544.             may fail to evaluate expressions when the process is
  545.             stopped and the language of the current context is
  546.             Assembler. (Incident #246294)
  547.  
  548.             Workaround: The Expression View can be used in place of
  549.             the command line interface panel.
  550.  
  551.           +o After a process has stopped, an expression value may
  552.             become invalid due to evaluation of another expression
  553.             or use of debugger commands which can lead to
  554.             modification of expression values.  An example would be
  555.             the value of a variable displayed in Expression View
  556.             which is not recalculated after the variable is updated
  557.             with the _a_s_s_i_g_n command in the command line interface
  558.             panel.  (Incident #247050)
  559.  
  560.             Workaround: Force the value of the expression to be
  561.             recalculated by retyping the expression.
  562.  
  563.           +o The Array Visualizer will no longer implicitly use _t_h_i_s
  564.             on a C++ program.  When attempting to display the
  565.             member of a class you will have to explicitly include
  566.             _t_h_i_s-> along with the name of the member.  (Incident
  567.             #248882)
  568.  
  569.           +o Use of the division, and modulus operators in the
  570.             ``Indexing Expression:'' field of the Array Visualizer
  571.             may not work correctly on 64-bit executables.
  572.             (Incident #249262)
  573.  
  574.           +o On startup _c_v_d connects to an underlying process
  575.             control server.  Due to a change in WorkShop 2.4, when
  576.             _c_v_d is using a version of the communication protocol
  577.             which is incompatible with the version used by the
  578.             server it can no longer recognize the condition and
  579.             report the incompatible version numbers.  As in
  580.             previous versions of WorkShop, _c_v_d will exit, but it
  581.             will no longer report the mismatch of communication
  582.             protocol versions. (Incident #233399)
  583.  
  584.           +o _c_v_d may not list all the member functions of a class
  585.             correctly when the class and its member functions are
  586.             built into a separate DSO.  (Incident #249733)
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.                                   - 10 -
  599.  
  600.  
  601.  
  602.           +o If the application uses the isolate process (or CPU
  603.             pinning) feature of IRIX, the thread pinned to a
  604.             specific CPU cannot be debugged.  The isolate process
  605.             feature is accessed by a call to _s_y_s_m_p(_M_P__I_S_O_L_A_T_E).
  606.             (Incident #216158)
  607.  
  608.             Workaround: Disable calls to _s_y_s_m_p(_M_P__I_S_O_L_A_T_E) to
  609.             enable debugging.
  610.  
  611.           +o Occasionally, path remapping will cease to function
  612.             properly: new entries in the list will not take
  613.             immediate effect, yet if you exit and restart _c_v_d, they
  614.             will apply. (Incident #247133)
  615.  
  616.             Workaround: Exit _c_v_d and kkkkiiiillllllllaaaallllllll ttttttttsssseeeessssssssiiiioooonnnn.
  617.  
  618.           +o _c_v_d cannot evaluate expressions involving local classes
  619.             (classes that are defined inside of a function).
  620.             (Incident #212268)
  621.  
  622.           +o The Query menu within _c_v_d will fail to operate
  623.             correctly if _c_v_d was attached to a running process (ccccvvvvdddd
  624.             ----ppppiiiidddd ............)  or if _c_v_s_t_a_t_i_c is started by hand (``Admin:
  625.             Launch Tool -> Static Analyzer'').   (Incident #238595)
  626.  
  627.           +o A trap at the closing brace of a C/C++ function may not
  628.             be defined properly.  This is known to occur when the
  629.             last statement of the function is a return statement.
  630.             When this problem occurs the trap is defined on a
  631.             source line following the closing brace, typically the
  632.             opening brace of the next function.
  633.  
  634.             Workaround: Place the trap on the source line
  635.             containing the return statement as opposed to the line
  636.             containing the closing brace.   (Incident #277136)
  637.  
  638.           +o _c_v_d may close file descriptors it should leave open in
  639.             the _r_u_n command.  All file descriptors at 3 and above
  640.             are closed by _c_v_d.   (Incident #277295)
  641.  
  642.           +o The Structure Browser is known to abort when asked to
  643.             display more than 100 elements of a linked list.
  644.             (Incident #278140)
  645.  
  646.           +o The _c_v_p_c_s component of _c_v_d is known to occasionally
  647.             abort on erroneous expression evaluation requests from
  648.             the one-time expression evaluation component of _c_v_d.
  649.             (Incident #282160)
  650.  
  651.           +o Evaluation of a C++ expression which contains a
  652.             variable whose name is the same as that of a structure
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.                                   - 11 -
  665.  
  666.  
  667.  
  668.             may lead to an erroneous error.   (Incident #286949)
  669.  
  670.        5.1.1  _D_e_b_u_g_g_i_n_g__6_4_-_b_i_t__a_n_d__N_3_2__C_+_+__p_r_o_g_r_a_m_s  This section
  671.        discusses problems that are unique to debugging 64-bit and
  672.        N32 C++ programs.  (The problems discussed in the previous
  673.        section may also apply to 64-bit and N32 C++ debugging.)
  674.  
  675.        The first two problems on the following list are limitations
  676.        of this release of the debugger; they will be fixed in a
  677.        future release.  The remaining problems will be fixed by a
  678.        future release of the C++ compiler.
  679.  
  680.           +o Interactive function calls to member functions cannot
  681.             be performed through objects of the class using the ->
  682.             or . access operators.
  683.  
  684.             Workaround: Perform the interactive function call using
  685.             the class-qualified name.  In such a call, the _t_h_i_s
  686.             parameter must be passed explicitly.
  687.  
  688.             ccccllllaaaassssssss nnnnooooddddeeee {{{{
  689.                 nnnnooooddddeeee ****____rrrriiiigggghhhhtttt;;;;
  690.                 nnnnooooddddeeee ****____lllleeeefffftttt;;;;
  691.             ppppuuuubbbblllliiiicccc::::
  692.                 nnnnooooddddeeee(((())));;;;
  693.                 nnnnooooddddeeee**** rrrriiiigggghhhhtttt(((())));;;;
  694.                 nnnnooooddddeeee**** lllleeeefffftttt(((())));;;;
  695.             }}}};;;;
  696.             nnnnooooddddeeee ****nnnn;;;;
  697.  
  698.             In this example, the member functions cannot be called
  699.             as _n->_r_i_g_h_t() or _n->_l_e_f_t().  Instead, they must be
  700.             called as _n_o_d_e::_r_i_g_h_t(_n) or _n_o_d_e::_l_e_f_t(_n).
  701.  
  702.           +o The _t_h_i_s parameter is not explicitly dereferenced in
  703.             member functions.
  704.  
  705.             Workaround: Access members of the _t_h_i_s parameter in a
  706.             member function by using the _t_h_i_s-> accessor.
  707.  
  708.           +o There is no debugging output for anonymous unions
  709.             declared in a block. (Incident 236926)
  710.  
  711.           +o Static data members cannot be accessed using the -> or
  712.             . access operators. (Incident 237006)
  713.  
  714.             Workaround: Access static data members using the
  715.             class-qualified name.
  716.  
  717.           +o Static member functions cannot be accessed using the ->
  718.             or . access operators, or by using the class-qualified
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.                                   - 12 -
  731.  
  732.  
  733.  
  734.             name. (Incident 237029)
  735.  
  736.             Workaround: Access static member functions using only
  737.             the name of the member function; do not use the class-
  738.             qualified name.
  739.  
  740.           +o Nested C++ classes appear as global classes.  (Incident
  741.             242800)
  742.  
  743.           +o The tag for nested C++ structures is incorrect.
  744.             Instead of the correct tag name, the C++ mangled name
  745.             is used. (Incident 244522)
  746.  
  747.           +o The type is incorrect for point-to-member variables.
  748.             Instead of having the correct pointer-to-member type,
  749.             these variables have the type of the member to which
  750.             they're pointing. (Incident 249844)
  751.  
  752.           +o The definition of a template class instantiation does
  753.             not include the member functions. (Incident 249849)
  754.  
  755.             Workaround: A member function definition for a template
  756.             class instantiation may be printed out using the
  757.             class-qualified name, prefixed by the template argument
  758.             list. For example, consider the following code segment:
  759.  
  760.             tttteeeemmmmppppllllaaaatttteeee<<<<ccccllllaaaassssssss TTTT>>>> ccccllllaaaassssssss vvvveeeeccccttttoooorrrr {{{{
  761.                 TTTT**** vvvv;;;;
  762.                 iiiinnnntttt sssszzzz;;;;
  763.             ppppuuuubbbblllliiiicccc::::
  764.                 vvvveeeeccccttttoooorrrr((((iiiinnnntttt))));;;;
  765.                 TTTT&&&& ooooppppeeeerrrraaaattttoooorrrr[[[[]]]]((((iiiinnnntttt))));;;;
  766.             }}}};;;;
  767.             vvvveeeeccccttttoooorrrr<<<<iiiinnnntttt>>>> vvvv1111((((22220000))));;;;
  768.  
  769.             In this example, the global names of the member
  770.             functions are <_i_n_t>_v_e_c_t_o_r::_v_e_c_t_o_r and
  771.             <_i_n_t>_v_e_c_t_o_r::_o_p_e_r_a_t_o_r[].
  772.  
  773.        5.1.2  _D_e_b_u_g_g_i_n_g__P_r_o_g_r_a_m__G_r_o_u_p_s__I_n_c_l_u_d_i_n_g__a__S_e_t_-_u_i_d__P_r_o_g_r_a_m
  774.        Because of standard IRIX security policies, the debugger can
  775.        not debug a program running as another user (unless you are
  776.        logged in as _r_o_o_t).  This restriction applies even to system
  777.        programs which are set-UID, and even when all you want to do
  778.        with the set-UID program is debug something that it in turn
  779.        runs.  It is common to use the system-provided set-UID
  780.        program _x_w_s_h (or _w_i_n_t_e_r_m, which in turn runs _x_w_s_h) in this
  781.        way.
  782.  
  783.        There are two basic ways to deal with this problem.  You can
  784.        become _r_o_o_t before starting your debugging session, which
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.                                   - 13 -
  797.  
  798.  
  799.  
  800.        grants you all necessary access rights (but may be
  801.        infeasible for your application or situation).  Or, you can
  802.        arrange to use a non-set-UID copy of the intermediary
  803.        program, for example with _c_h_m_o_d, or by making a copy of the
  804.        program with _c_p.
  805.  
  806.        There is also a bug in the IRIX 6.0 version of _x_w_s_h which
  807.        makes it unreliable if run non-set-UID.  You may be able to
  808.        use _x_t_e_r_m instead of _x_w_s_h for these applications, for
  809.        example by using _w_i_n_t_e_r_m and setting the environment
  810.        variable WWWWIIIINNNNTTTTEEEERRRRMMMM to xxxxtttteeeerrrrmmmm before starting your debugging
  811.        session (and providing a non-set-UID copy of _x_t_e_r_m).
  812.  
  813.        If your application depends on features of _x_w_s_h, can not use
  814.        _x_t_e_r_m instead, and can not be run as _r_o_o_t, then this
  815.        procedure will generally ensure that you can debug as non-
  816.        root:
  817.  
  818.           +o Make a non-set-uid copy of _x_w_s_h (ccccpppp ////uuuussssrrrr////ssssbbbbiiiinnnn////xxxxwwwwsssshhhh ....).
  819.  
  820.           +o Start several _x_w_s_h or _x_t_e_r_m windows, as the user who
  821.             will be doing the debugging.  Exit them all.  It is
  822.             important that they all be started together, all be
  823.             running at once, and then be exited immediately before
  824.             the debugging session begins.
  825.  
  826.           +o Debug your application.
  827.  
  828.           +o Set one or more breakpoints by function name ("stop in
  829.             main"), in the syscall panel, or with the ``Traps: Stop
  830.             at Function Entry'' menu - not by clicking in the glyph
  831.             bar of the main window.  (Traps set on a particular
  832.             source line, as by clicking, are not copied from one
  833.             program to the next.)
  834.  
  835.           +o Bring up the MPView, from the Admin menu.
  836.  
  837.           +o Be sure all the "copy traps...." boxes are checked in
  838.             its configuration dialog.
  839.  
  840.           +o Run your application, using MPView's ``Continue''
  841.             button as necessary and watching MPView for the
  842.             appearance of your subprocess.  Double-click it to
  843.             launch a debugger on it.
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.                                   - 14 -
  863.  
  864.  
  865.  
  866.        5.2  _W_o_r_k_S_h_o_p__F_i_x_+_C_o_n_t_i_n_u_e
  867.  
  868.        5.2.1  _L_i_m_i_t_a_t_i_o_n_s__o_f__F_i_x_+_C_o_n_t_i_n_u_e
  869.  
  870.           +o You cannot add or delete global variables or functions.
  871.  
  872.           +o You are restricted to editing the bodies of existing
  873.             non-inline functions. If you attempt to edit an inline
  874.             function, no warnings are emitted, but the results are
  875.             unpredictable.
  876.  
  877.             Incident 240481
  878.  
  879.           +o You cannot modify a function while the program is
  880.             sleeping in a system call, or is stopped on entry to a
  881.             system call.  The debugger will detect this condition
  882.             and prevent you from loading the modified function
  883.             until you return from the system call.
  884.  
  885.             You can set a trap on exit from the system call using
  886.             the System Call panel of cvd and continue the program
  887.             in order to get to a point where function loading is
  888.             allowed.
  889.  
  890.             Incident 244664
  891.  
  892.           +o The Multiprocess View capability of the debugger does
  893.             not interact well with the Fix and Continue feature.
  894.             sproc'ed and forked processes inherit the new
  895.             redefinition of the function.  However, when starting a
  896.             debugger session on the new process, the debugger is
  897.             not aware that the process contains function
  898.             redefinitions.  This means that there is no way to
  899.             deactivate the new definition in the new process after
  900.             a sproc() or a fork(). If the new function definition
  901.             is not desired in the new process, it is necessary to
  902.             stop the process on entry to fork() or sproc(),
  903.             deactivate the modified function and activate it again
  904.             on exit from fork() or sproc().
  905.  
  906.           +o Performance Analysis and Fix and Continue are mutually
  907.             exclusive operations.  You should not run a performance
  908.             experiment after you have modified a function.  In most
  909.             cases, the debugger will detect attempts to mix
  910.             Performance Analysis and Fix and Continue operations,
  911.             and prevent them.
  912.  
  913.             Incident 245326
  914.  
  915.           +o The Fix and Continue feature is not supported for code
  916.             compiled with the Delta/C++ (DCC) compiler. The current
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.                                   - 15 -
  929.  
  930.  
  931.  
  932.             implementation does not detect this problem.
  933.  
  934.           +o Fix and Continue can only be used on ELF executables
  935.             compiled in shared mode.  Fix and Continue is
  936.             implemented by using the dynamic loader, which is not
  937.             available in COFF or non-shared ELF executables.
  938.  
  939.             Incident 243574
  940.  
  941.           +o Fix and Continue is only supported on Irix 5.3. In
  942.             particular, Fix and Continue is not supported on Irix
  943.             5.2 and Irix 6.x.
  944.  
  945.        5.2.2  _K_n_o_w_n__P_r_o_b_l_e_m_s__w_i_t_h__F_i_x__a_n_d__C_o_n_t_i_n_u_e
  946.  
  947.           +o The Disassembly View has not been updated to work with
  948.             the Fix and Continue feature. As a result, you will
  949.             notice the following behavior when viewing a modified
  950.             function in Disassembly View:
  951.  
  952.                +o The filename displayed is incorrect, and reflects
  953.                  the name of the temporary file used by the Fix and
  954.                  Continue mechanism.
  955.  
  956.                +o The assembly instructions are not interleaved with
  957.                  the source code.
  958.  
  959.                +o The line numbers shown in Disassembly View do not
  960.                  reflect the line numbers used in the rest of the
  961.                  debugger (i.e., instead of "7.3", the Disassembly
  962.                  View will say line "9").
  963.  
  964.             Incident 243635
  965.  
  966.           +o The initialization value of local statics in C may not
  967.             be modified.  If you make such a change, it will
  968.             silently be ignored. Since you are permitted to add new
  969.             local statics, you can accomplish a change of the
  970.             initialization value using the following workaround:
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.                                   - 16 -
  995.  
  996.  
  997.  
  998.             /* Original function */
  999.             void f() {
  1000.                static int i = 0; /* oops. This should be -1 */
  1001.             }
  1002.  
  1003.             /* New function */
  1004.             void f() {
  1005.                static int i = 0; /* oops. This should be -1 */
  1006.                static int first_time = 1;
  1007.                if (first_time) {
  1008.                   i = -1;
  1009.                   first_time = 0;
  1010.                }
  1011.             }
  1012.  
  1013.             Incident 246306
  1014.  
  1015.           +o In C it is legal to call a function without declaring
  1016.             it, and later declare the function to be static. For
  1017.             example:
  1018.  
  1019.                main(){
  1020.                   f();
  1021.                   return 0;
  1022.                }
  1023.  
  1024.                static int f(){
  1025.                }
  1026.  
  1027.             Since the Fix and Continue feature will only compile
  1028.             "main", and since there is no declaration for "f", the
  1029.             compiler will assume that "f" is an external function,
  1030.             and there will subsequently by a "Load Error" in the
  1031.             Interpreter Message window since the runtime loader
  1032.             will be unable to find an external definition for "f".
  1033.             The workaround is to make sure the compiler knows that
  1034.             "f" is static when you use modify "main" during a Fix
  1035.             and Continue operation:
  1036.  
  1037.                main(){
  1038.                   static int f();
  1039.                   f();
  1040.                   return 0;
  1041.                }
  1042.  
  1043.             Incident 246317
  1044.  
  1045.           +o When executing an older version of a function, you will
  1046.             see the most recent source in the source window.
  1047.             Consequently the line numbers, PC highlight, and
  1048.             breakpoints displayed may be on the wrong lines.
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.                                   - 17 -
  1061.  
  1062.  
  1063.  
  1064.           +o If you open a source file using "Source:Open...", the
  1065.             source file is opened in "Editable" mode by default.
  1066.             This prevents Fix and Continue operations on the file,
  1067.             and you will see the "Fix+Continue" button grayed out.
  1068.             If you wish to use Fix and Continue on this file, use
  1069.             the "Source:Make Read Only" menu option. If you use
  1070.             "Source:Open..." to open a source file in which you
  1071.             have previously modified functions, the modified
  1072.             functions will not be highlighted while the source file
  1073.             is editable.
  1074.  
  1075.             If you save a file in which some changes were made
  1076.             using Fix and Continue, and some changes were made
  1077.             using "Source:Open...", confusion may occur.  You can
  1078.             workaround this by using "Source:Make Editable"
  1079.             followed by "Source:Make Read Only". Another workaround
  1080.             is to switch to some other file and then switch back to
  1081.             the current file. Switching back can be accomplished by
  1082.             making the process stop in the file or by using
  1083.             "Source:Open..." followed by "Source:Make Read Only".
  1084.  
  1085.             Incidents 243627, 243629, 248842
  1086.  
  1087.           +o If you are stopped in a program, and you modify a
  1088.             function which is not the one you are stopped in, after
  1089.             the "Parse And Load" completes your source is
  1090.             repositioned at the line on which you are stopped,
  1091.             rather than at the function you just modified.
  1092.  
  1093.             Incident 246739
  1094.  
  1095.           +o When a "Parse and Load" is performed, a compiler is
  1096.             invoked to compile the modified function. Before
  1097.             performing the compile, the compilation process will do
  1098.             a "cd" so that the compilation takes place in the same
  1099.             directory as the original file was compiled in. This
  1100.             "cd" operation does not currently take path remapping
  1101.             into account, so you will have problems when you
  1102.             attempt to use "Fix and Continue" on an executable
  1103.             which was built on a different machine. The workaround
  1104.             is to make sure that you use "Fix and Continue" on an
  1105.             executable in the same environment as the one it was
  1106.             built in.  Another alternative is to adjust the command
  1107.             line options on the compile command (using the Build
  1108.             Environment window) so that they will work in the
  1109.             debugging environment.
  1110.  
  1111.             Incident 246189
  1112.  
  1113.           +o The Fix and Continue mechanism does not currently check
  1114.             to make sure that a file has not been modified after it
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.                                   - 18 -
  1127.  
  1128.  
  1129.  
  1130.             was last compiled. If you modify a function using Fix
  1131.             and Continue, save the source back to its original
  1132.             file, and forget to rebuild your application after
  1133.             exiting the debugger, you will see unpredictable result
  1134.             if you re-enter the debugger and attempt to use Fix and
  1135.             Continue. For example, the debugger may think that
  1136.             function "f" is on lines 15 to 20, whereas your
  1137.             previous changes may have repositioned the function on
  1138.             lines 17 to 22. When you select "Fix+Continue:Edit" if
  1139.             you notice that the edit region does not cover the
  1140.             entire body of the function, you should exit the
  1141.             debugger and rebuild your application.
  1142.  
  1143.             Incident 245098
  1144.  
  1145.           +o If your original build compiled multiple files with a
  1146.             single command line, this same command line will be run
  1147.             when using Fix and Continue to modify a function in any
  1148.             of those files, causing unnecessary recompilations of
  1149.             the other files, and possibly erroneous results.  For
  1150.             best results, compile files one at a time using the -c
  1151.             option of the compiler.  If this is not possible, use
  1152.             the Build Environment view to modify the command line
  1153.             and remove all file names from it (Fix and Continue
  1154.             will add in the file actually being compiled
  1155.             automatically).
  1156.  
  1157.           +o When you use the "Fix and Continue->Edit" menu item,
  1158.             the region you are allowed to edit begins with the line
  1159.             containing the first "{" of your function.  This line
  1160.             would include the line containing the function and
  1161.             parameter declaration, for the coding style shown
  1162.             below:
  1163.  
  1164.                void f(int y){
  1165.                   /* .... */
  1166.                }
  1167.  
  1168.             In such cases, you should make sure you do not change
  1169.             the function name and parameter profile. The
  1170.             implementation does not currently check that you do not
  1171.             make such changes, but you may receive a message like
  1172.             this:
  1173.  
  1174.                No reply from PCS;
  1175.                unknown error while loading dso for the modified function
  1176.  
  1177.             Incident 245299
  1178.  
  1179.           +o If a "stop exit" trap is placed in a function, and Fix
  1180.             and Continue is used on the function after hitting the
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.                                   - 19 -
  1193.  
  1194.  
  1195.  
  1196.             exit trap, then if execution can continue in the new
  1197.             function, the PC is moved back to the beginning of the
  1198.             line (it is in the epilogue, at the "jr ra"
  1199.             instruction). This means the epilogue is re-executed.
  1200.             This could cause problems if the stack pointer has
  1201.             already been decremented, because now it will get
  1202.             decremented twice. Your program may occasionally work
  1203.             if the stack decrement happens to be after the "jr ra"
  1204.             instruction. The implementation currently does not
  1205.             always detect this condition.
  1206.  
  1207.             The workaround is to reposition the PC at the "jr ra"
  1208.             using PC->JumpTo after your F&C has completed.
  1209.  
  1210.             F&C and templates
  1211.  
  1212.           +o Using F&C on functions which use templates are not
  1213.             completely supported in this release. Typically, if the
  1214.             change involves instantiating new functions, then such
  1215.             a  change is not supported in this release. If the
  1216.             process is stopped when this change is made, the F&C
  1217.             error message window will display the error message
  1218.             from rld under the PCS error messages. Otherwise, views
  1219.             would temporarily show that the change is ok, but when
  1220.             the process is run later , load error message will be
  1221.             reported and the change is switched back to edited
  1222.             state.
  1223.  
  1224.             The error message would be something like:  :
  1225.             26095:/tmp_mnt/hosts/xanadu/usr/people/pal/kim/mnm:
  1226.             rld: Fatal Error: unresolvable symbol in
  1227.             /var/tmp/cvintp26042/cvfn1.3.so:
  1228.                     static_allocator__15vector__pt__2_i
  1229.  
  1230.             Incident 249309
  1231.  
  1232.  
  1233.        5.3  _W_o_r_k_S_h_o_p__M_o_t_i_f__A_n_a_l_y_z_e_r
  1234.  
  1235.           +o The Motif Analyzer requires Irix 5.3 for correct
  1236.             operation.  The instrumented libraries have been tested
  1237.             only with an Irix 5.3 environment.  Using them with an
  1238.             older version of Irix may result in compatibility
  1239.             problems with other shared libraries.
  1240.  
  1241.           +o The Motif Analyzer may produce unexpected results when
  1242.             used with an application compiled on a pre-Irix 5.3
  1243.             system using static libraries, and with non-Motif (e.g.
  1244.             Xaw) applications.  In particular, the widget selection
  1245.             and widget tree functionality may not work.
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.                                   - 20 -
  1259.  
  1260.  
  1261.  
  1262.           +o The instrumented, debug Motif library shipped with the
  1263.             MegaDev.sw.motif subsystem and installed in
  1264.             /usr/lib/WorkShop/Motif contain the Irix 5.3 version of
  1265.             motif_eoe.sw.eoe up to and including patch 258.  If you
  1266.             are debugging a Motif-related problem in your
  1267.             application and the problem is not reproducible using
  1268.             the instrumented Motif library in
  1269.             /usr/lib/WorkShop/Motif, it may be fixed with the patch
  1270.             258 version of motif_eoe.sw.eoe.
  1271.  
  1272.           +o If you create traps in the Motif Analyzer window using
  1273.             the Breakpoints examiner, trap items will appear in the
  1274.             Trap Manager window of the WorkShop Debugger.  These
  1275.             items will be labeled "MotifBreak."  You should not
  1276.             attempt to modify or delete these traps using the Trap
  1277.             Manager.  Instead, always use the Breakpoints examiner
  1278.             to modify or delete your Motif-related breakpoints.
  1279.  
  1280.           +o If you install the MegaDev.sw.motif subsystem and then
  1281.             reinstall the WorkShop.sw.cvd subsystem, the "Motif
  1282.             Analyzer" item will disappear from the Views menu in
  1283.             the WorkShop Debugger.  Reinstalling the
  1284.             MegaDev.sw.motif subsystem will correct the problem.
  1285.  
  1286.           +o If you install the WorkShop.sw.cvd and MegaDev.sw.motif
  1287.             subsystems, and then remove only the MegaDev.sw.motif
  1288.             subsystem, the "Motif Analyzer" menu item will still
  1289.             exist in the Views menu in the WorkShop Debugger.
  1290.             Selecting this menu item, however, will result in an
  1291.             error dialog.  Reinstalling the WorkShop.sw.cvd
  1292.             subsystem will remove the item from the Views menu.
  1293.  
  1294.           +o Occasionally, the Motif Analyzer display will remain
  1295.             inactive after switching between processes using
  1296.             WorkShop's "Switch Process" or "Switch Executable" menu
  1297.             items, or when rerunning the process after changing the
  1298.             command arguments.  If this happens, close the Motif
  1299.             Analyzer window and use WorkShop's Views menu to bring
  1300.             it up again.
  1301.  
  1302.           +o If your application connects to a remote X display and
  1303.             you do not set LD_LIBRARY_PATH to include
  1304.             /usr/lib/WorkShop/Motif, any Editres-type operations
  1305.             (e.g. widget select and widget tree) will operate on
  1306.             the local display and not work correctly.  Either run
  1307.             your program using the local X display or change
  1308.             LD_LIBRARY_PATH as advised.
  1309.  
  1310.           +o A small number of applications build their widget
  1311.             hierarchy in such a way that Editres widget selection
  1312.             operations cause them to exit with an X error.  If your
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.                                   - 21 -
  1325.  
  1326.  
  1327.  
  1328.             application falls into this category, then using the
  1329.             Motif Analyzer widget select functionality will cause
  1330.             the same thing to happen.
  1331.  
  1332.  
  1333.        5.4  _W_o_r_k_S_h_o_p__B_u_i_l_d__A_n_a_l_y_z_e_r
  1334.  
  1335.        If target or dependency names are specified using
  1336.        parentheses to denote files stored within an archive
  1337.        library, _c_v_b_u_i_l_d will use a single node to represent the
  1338.        archive library, rather than individual nodes for each file
  1339.        within it.
  1340.  
  1341.  
  1342.        5.5  _W_o_r_k_S_h_o_p__S_t_a_t_i_c__A_n_a_l_y_z_e_r
  1343.  
  1344.        5.5.1  _G_e_n_e_r_a_l__K_n_o_w_n__P_r_o_b_l_e_m_s
  1345.  
  1346.           +o The Directory Query "List Files" works only when the
  1347.             query target is a full path name of a directory.  For
  1348.             example, it works on the target "/usr/include", but not
  1349.             on a target like "include".
  1350.  
  1351.             Workaround: Select the General Option "Full Pathnames".
  1352.             Then any directory names displayed will contain full
  1353.             paths, and so the "List Files" query will cork on them
  1354.             correctly.
  1355.  
  1356.           +o If you use _c_v_s_t_a_t_i_c to analyze a fileset and then
  1357.             change one or more of the header files included by the
  1358.             files in the fileset, rescanning the fileset will not
  1359.             detect the change.  Rescanning only detects changes to
  1360.             source files listed in the fileset.  Similarly, if you
  1361.             remove a source file from a fileset and rescan, the
  1362.             header files included by that file are not removed from
  1363.             the database. (Incident #179731)
  1364.  
  1365.             Workaround: If you have changed one or more files in a
  1366.             fileset (or included by files in a fileset), you can
  1367.             get a consistent database by selecting ``Force Scan''
  1368.             from the Admin menu.
  1369.  
  1370.           +o Some printers may clip the output when printing a
  1371.             PostScript version of graph saved by _c_v_s_t_a_t_i_c.
  1372.  
  1373.             Workaround: None, except trying another printer, or
  1374.             re-laying out the graph by hand to avoid clipping.
  1375.  
  1376.        5.5.2  _K_n_o_w_n__P_r_o_b_l_e_m_s__w_i_t_h__M_i_x_e_d__L_a_n_g_u_a_g_e_s
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.                                   - 22 -
  1391.  
  1392.  
  1393.  
  1394.           +o If you analyze a program that contains both Fortran and
  1395.             C routines, _c_v_s_t_a_t_i_c in scanner mode does not recognize
  1396.             that the C function ffffoooooooo____ and the Fortran function ffffoooooooo
  1397.             refer to the same routine.  In parser mode, _c_v_s_t_a_t_i_c
  1398.             will identify the routines correctly, if it analyzes
  1399.             the C file containing ffffoooooooo____ before the Fortran file that
  1400.             calls ffffoooooooo.  So, make sure that your C files appear
  1401.             earlier in the fileset than your Fortran files.
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.                                   - 23 -
  1457.  
  1458.  
  1459.  
  1460.  
  1461.        5.5.3  _G_e_n_e_r_a_l__K_n_o_w_n__P_r_o_b_l_e_m_s__i_n__S_c_a_n_n_e_r__M_o_d_e
  1462.  
  1463.           +o In general, _c_v_s_t_a_t_i_c does not require code to be able
  1464.             to be compiled.  _c_v_s_t_a_t_i_c should provide useful
  1465.             information even when code has syntax errors. However,
  1466.             there are several requirements that must be met for
  1467.             _c_v_s_t_a_t_i_c to work properly. In C and C++, _c_v_s_t_a_t_i_c
  1468.             relies on the existence of matching braces to determine
  1469.             the beginning and ending of blocks and bodies of
  1470.             functions. In Fortran, _c_v_s_t_a_t_i_c relies on the existence
  1471.             of matching end statements. Functions without closing
  1472.             braces, or end statements, or code with too many end
  1473.             statements or mismatched braces can cause unpredictable
  1474.             results. In C, it may be necessary to use _c_v_s_t_a_t_i_c's
  1475.             ----pppprrrreeeepppprrrroooocccceeeessssssss option with heavily _i_f_d_e_f'd code to achieve
  1476.             matched braces.
  1477.  
  1478.             If any of these limitations of scanner mode keeps
  1479.             _c_v_s_t_a_t_i_c from being useful, using parser mode may be
  1480.             the right solution.
  1481.  
  1482.           +o _c_v_s_t_a_t_i_c accepts regular expressions in nearly all
  1483.             fields. This can occasionally cause problems if you
  1484.             unintentionally use a pattern without realizing it is a
  1485.             regular expression. For example, specifying a filename
  1486.             of ffffoooooooo....cccc++++++++ usually fails, because ++++ is a special
  1487.             character in regular expressions.
  1488.  
  1489.             Workaround: Backslash all regular expression special
  1490.             characters when not used to specify a wildcard pattern.
  1491.             For example, the filename mentioned above would be
  1492.             entered as ffffoooooooo....cccc\\\\++++\\\\++++.
  1493.  
  1494.           +o The _c_v_s_t_a_t_i_c Variable query, ``Who Sets'' recognizes
  1495.             only variable assignments that use ``='' to assign
  1496.             directly to a variable.  This query does not recognize
  1497.             or account for aggregate initialization statements in C
  1498.             or C++, references in C++, assignments made as a result
  1499.             of passing or operating on pointers in C, or data,
  1500.             equivalence, common, or assign statements in Fortran.
  1501.  
  1502.             Workaround. Use ``Who References'' to see all locations
  1503.             in which the variable is used and to visually inspect
  1504.             for assignments.
  1505.  
  1506.           +o By default, _c_v_s_t_a_t_i_c does not honor _i_f_d_e_f's in source
  1507.             code. Much of the time, this is desirable behavior.
  1508.             _c_v_s_t_a_t_i_c allows you to find _a_l_l references that satisfy
  1509.             a query. However, this may result in an incorrect or
  1510.             misleading function call tree. Heavily _i_f_d_e_f'd code may
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.                                   - 24 -
  1523.  
  1524.  
  1525.  
  1526.             also confuse _c_v_s_t_a_t_i_c, because (in C) _c_v_s_t_a_t_i_c relies
  1527.             on matching braces to detect the end of functions.
  1528.  
  1529.             Workaround: Use the ----pppprrrreeeepppprrrroooocccceeeessssssss flag when starting
  1530.             _c_v_s_t_a_t_i_c. This makes _c_v_s_t_a_t_i_c run much more slowly, but
  1531.             it honors most _i_f_d_e_fs.
  1532.  
  1533.           +o _c_v_s_t_a_t_i_c recognizes many common C, C++, and Fortran
  1534.             language patterns.  However, all three languages allow
  1535.             programmers to write code that is not easily identified
  1536.             by patterns.
  1537.  
  1538.             Workaround: If you find that _c_v_s_t_a_t_i_c misses or
  1539.             misidentifies parts of a program, you can usually
  1540.             resort to string, regular expression, or symbol queries
  1541.             to find the information you are looking for.
  1542.  
  1543.           +o Files containing very long lines are not handled in
  1544.             scanner mode. If a file contains any line longer than
  1545.             3000 characters, _c_v_s_t_a_t_i_c's scanner will fail.
  1546.  
  1547.             Workaround: Use parser mode, or shorten your source
  1548.             lines.
  1549.  
  1550.        5.5.4  _K_n_o_w_n _P_r_o_b_l_e_m_s _U_s_i_n_g _c_v_s_t_a_t_i_c _i_n _S_c_a_n_n_e_r _M_o_d_e _w_i_t_h
  1551.        _C++  _c_v_s_t_a_t_i_c analyzes C++ source code much more accurately
  1552.        in parser mode than in scanner mode.  The following problems
  1553.        are known to occur in scanner mode.  They can be avoided by
  1554.        following the workaround suggestions, or by using parser
  1555.        mode.
  1556.  
  1557.           +o _c_v_s_t_a_t_i_c does not do macro expansion, so classes based
  1558.             on macros used to simulate C++ parameterized types are
  1559.             not detected.
  1560.  
  1561.           +o _c_v_s_t_a_t_i_c does not completely handle function calls made
  1562.             through function pointers, in C or C++. In C++, this
  1563.             includes calls to member functions made through object
  1564.             pointers.  For example, consider the following code
  1565.             segment:
  1566.  
  1567.             ssssaaaammmmpppplllleeeeffffuuuunnnnccccttttiiiioooonnnn (((())))
  1568.             {{{{
  1569.                AAAA ****oooobbbbjjjjeeeecccctttt1111 ==== nnnneeeewwww AAAA(((())));;;;
  1570.                BBBB ****oooobbbbjjjjeeeecccctttt2222 ==== nnnneeeewwww BBBB(((())));;;;
  1571.                oooobbbbjjjjeeeecccctttt1111---->>>>ffffuuuunnnncccc(((())));;;;
  1572.                oooobbbbjjjjeeeecccctttt2222---->>>>ffffuuuunnnncccc(((())));;;;
  1573.             }}}}
  1574.  
  1575.             In this example, _c_v_s_t_a_t_i_c correctly reports that
  1576.             samplefunction() calls func() two times. However, it
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.                                   - 25 -
  1589.  
  1590.  
  1591.  
  1592.             cannot determine that these two function calls are
  1593.             actually made to two different member functions,
  1594.             implemented by two different classes. Similarly,
  1595.             _c_v_s_t_a_t_i_c does not know about the _t_h_i_s pointer.
  1596.  
  1597.             Workaround: Don't try to display full function call
  1598.             trees for C++. Instead use queries like ``Who Calls
  1599.             <function>''or ``Who Is Called By <function>'' which
  1600.             produce meaningful results.
  1601.  
  1602.           +o _c_v_s_t_a_t_i_c does not understand overloaded functions.
  1603.  
  1604.             Workaround: Use the text view for all queries involving
  1605.             overloaded functions.
  1606.  
  1607.           +o C++ allows extensive use of operator overloading, which
  1608.             allows you to write code that can obscure what is
  1609.             really happening in the code. Because _c_v_s_t_a_t_i_c is
  1610.             designed around a pattern matcher, novel constructs
  1611.             produced by overloading operators are not normally
  1612.             detected. Constructs that conform to normal language
  1613.             conventions should normally be found. For example, if A
  1614.             and B are objects, and the ``='' operator has been
  1615.             overloaded to indicate an assignment of the contents of
  1616.             object B to the contents of object A, _c_v_s_t_a_t_i_c should
  1617.             be able to handle this situation. However, if some
  1618.             unusual overloading conventions have been used (say,
  1619.             using ``[]'' to mean a function call), _c_v_s_t_a_t_i_c does
  1620.             not show the same results as the C compiler.
  1621.  
  1622.             Workaround: If you have such code, use string or
  1623.             regular expression searches, or symbol searches to find
  1624.             what you are looking for.
  1625.  
  1626.           +o C++ programs containing templates are not well
  1627.             understood by scanner mode.
  1628.  
  1629.             Workaround: Use parser mode.
  1630.  
  1631.        5.5.5  _K_n_o_w_n__p_r_o_b_l_e_m_s__U_s_i_n_g__c_v_s_t_a_t_i_c__w_i_t_h__F_o_r_t_r_a_n
  1632.  
  1633.           +o Problem: cvstatic changes case in source files.
  1634.  
  1635.             Workaround:  For best results, ignore case:
  1636.  
  1637.             Because the Fortran compilers translate Fortran
  1638.             programs to lower (for Fortran 77) or upper (for
  1639.             Fortran 90) case when analyzing them, you may have
  1640.             trouble selecting a symbol name from the Source View
  1641.             and then using the selection as the target of a query.
  1642.             Therefore, when using the Static Analyzer on Fortran
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.                                   - 26 -
  1655.  
  1656.  
  1657.  
  1658.             sources, it is best to select the Ignore Case option,
  1659.             either through the General Option menu, or persistently
  1660.             through the use of the X resource mechanism thus:
  1661.  
  1662.                     cvstatic*ignoreCase: True
  1663.  
  1664.           +o Problem: Fortran file suffixes are ambiguous.
  1665.  
  1666.             Workaround: Tell cvstatic what suffixes you use for
  1667.             which Fortran variant.
  1668.  
  1669.             Both Fortran 77 and Fortran 90 accept files with the
  1670.             the suffixes .f and .F.  So, there is no obvious way
  1671.             for the Static Analyzer to tell whether a source file
  1672.             is Fortran 77 or Fortran 90.
  1673.  
  1674.             To indicate that you want a particular suffix to
  1675.             correspond to a particular language, you can set the
  1676.             suffixSource X resource before running cvstatic.  For
  1677.             example:
  1678.  
  1679.             *suffixSource: C++.c++ C++.C C++.cxx C++.h C.c
  1680.             Fortran.f Fortran90.F Fortran90.f90
  1681.  
  1682.             This line in your .Xdefaults file indicates that you
  1683.             want files ending .f to be analyzed as Fortran 77
  1684.             codes, while files ending .F or .f90 are Fortran 90.
  1685.  
  1686.             You may want to analyze a set of files in which some
  1687.             files ending .f are Fortran 77 while other files with
  1688.             the same suffix are Fortran 90.  If so, the only way to
  1689.             distinguish them is for you manually to edit the
  1690.             cvstatic.fileset file and make sure that each filename
  1691.             is followed by the correct driver.  For example, these
  1692.             two lines in the fileset file indicate that foo.f is a
  1693.             Fortran 77 file, while bar.f is Fortran 90:
  1694.  
  1695.                 ////uuuussssrrrr////ppppeeeeoooopppplllleeee////yyyyoooouuuu////ffffoooooooo....ffff ffff77777777
  1696.                 ////uuuussssrrrr////ppppeeeeoooopppplllleeee////yyyyoooouuuu////bbbbaaaarrrr....ffff ffff99990000
  1697.  
  1698.        _c_v_s_t_a_t_i_c analyzes Fortran source code much more accurately
  1699.        in parser mode than in scanner mode.  The following problems
  1700.        are known to occur in scanner mode.  They can be avoided by
  1701.        following the workaround suggestions, or by using parser
  1702.        mode.
  1703.  
  1704.           +o _c_v_s_t_a_t_i_c occasionally misses function calls and other
  1705.             statements that directly follow an _i_f statement on the
  1706.             same line.
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.                                   - 27 -
  1721.  
  1722.  
  1723.  
  1724.           +o _c_v_s_t_a_t_i_c uses a pattern matching approach. This
  1725.             approach does not allow the tool to detect the
  1726.             irregular use of spaces within Fortran symbols, even
  1727.             though these are allowed by the Fortran compiler. For
  1728.             example, the Fortran compiler accepts the statement:
  1729.  
  1730.                    ssssuuuubbbb rrrroooouuuuttttiiiinnnneeee mmmmyyyy
  1731.                   1111ffffuuuunnnncccc ttttiiiioooonnnn
  1732.  
  1733.             as if it were written:
  1734.  
  1735.                   ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee mmmmyyyyffffuuuunnnnccccttttiiiioooonnnn
  1736.  
  1737.             _c_v_s_t_a_t_i_c does not handle such conventions.
  1738.  
  1739.             Workaround: None in scanner mode. Silicon Graphics
  1740.             strongly suggests changing such code to use a more
  1741.             readable coding style.
  1742.  
  1743.           +o _c_v_s_t_a_t_i_c does not support the use of Fortran keywords
  1744.             for uses other than their intrinsic function. For
  1745.             example, _c_v_s_t_a_t_i_c always recognizes word ``if'' as
  1746.             starting a conditional statement. Programs that use
  1747.             ``if'' as a variable or function name are not analyzed
  1748.             correctly.
  1749.  
  1750.             Workaround: None in scanner mode. Silicon Graphics
  1751.             strongly suggests changing such code to use a more
  1752.             readable coding style.
  1753.  
  1754.           +o In some situations, _c_v_s_t_a_t_i_c can mistake references to
  1755.             arrays as function calls. This is particularly true
  1756.             when the Fortran code relies on include files to
  1757.             declare arrays, common blocks, and so on. _c_v_s_t_a_t_i_c does
  1758.             not analyze header files at the point at which they
  1759.             occur, but simply adds them to the list of files to be
  1760.             analyzed. This contributes greatly to the speed of
  1761.             _c_v_s_t_a_t_i_c, but means that _c_v_s_t_a_t_i_c does not have various
  1762.             type declarations available to it. Because Fortran
  1763.             arrays cannot be differentiated from function calls
  1764.             without a declaration, _c_v_s_t_a_t_i_c identifies arrays not
  1765.             defined in the file in which they are referenced as
  1766.             function calls.
  1767.  
  1768.             Workaround: Use the Results Filter to exclude
  1769.             ``external'' functions. This limits all queries to
  1770.             those functions actually defined in the fileset.
  1771.             Excluding external functions hides all array references
  1772.             erroneously identified as function calls, but also
  1773.             hides all calls to library functions, intrinsic
  1774.             functions, or other routines declared outside the
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.                                   - 28 -
  1787.  
  1788.  
  1789.  
  1790.             fileset.
  1791.  
  1792.        5.5.6  _K_n_o_w_n__P_r_o_b_l_e_m_s__U_s_i_n_g__c_v_s_t_a_t_i_c__i_n__P_a_r_s_e_r__M_o_d_e
  1793.             Sometimes the General query "Where Symbol Used" fails
  1794.             to report some call sites, if the target of the query
  1795.             was a function.
  1796.  
  1797.             WorkAround: Use the Function query "Who Calls" or
  1798.             "Where Function Used" to get a complete list of places
  1799.             wehre the target function is called or otherwise used.
  1800.  
  1801.           +o The query Where Type Used may return duplicate results
  1802.             in C and C++ programs.  For example, asking Where Type
  1803.             Used Foo will produce two copies of the result showing
  1804.             the definition of the symbol
  1805.  
  1806.                        FFFFoooooooo ffff;;;;
  1807.  
  1808.             If one of these locations is shown without a function
  1809.             field and one is shown with a function, the latter is
  1810.             correct.
  1811.  
  1812.             Workaround: If you are explicitly looking for
  1813.             definitions, use the queries List Data of Type or List
  1814.             Functions of Type instead.  Otherwise, just ignore the
  1815.             duplications.
  1816.  
  1817.           +o The query Where Type Used is confusing about pointers
  1818.             in C and C++.
  1819.  
  1820.             If you ask Where Type Used about a user-defined type
  1821.             named Foo, the query will display all uses of Foo,
  1822.             including uses of types like Foo*, Foo**, Foo[], etc.
  1823.  
  1824.             But if you ask Where Type Used about a built-in type
  1825.             like void or char, the query will display only uses of
  1826.             that exact type.
  1827.  
  1828.             Workaround: Query explicitly about typenames like
  1829.             void*, char**, etc, that contain no user-defined
  1830.             typenames.
  1831.  
  1832.           +o Queries on "integer" and "real" in fortran don't work.
  1833.  
  1834.             Fortran reports integer types as having typenames I*4
  1835.             and I*8, real types with typenames R*4, R*8, complex
  1836.             types with typenames CM*8 and CM*16, and logical types
  1837.             as L*4.
  1838.  
  1839.             Workaround: To inquire about uses and declarations with
  1840.             these types, enter I*4 (or whatever) into the target
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.                                   - 29 -
  1853.  
  1854.  
  1855.  
  1856.             field instead of "integer".
  1857.  
  1858.           +o Mismatched member function declarations and definitions
  1859.             are not recognized by _c_v_s_t_a_t_i_c'_s parser.  The parser
  1860.             runs into trouble processing a member function if the
  1861.             signature of its declaration and definition are not
  1862.             identical.  For example, if the code contains something
  1863.             like this:
  1864.  
  1865.             ttttyyyyppppeeeeddddeeeeffff iiiinnnntttt**** iiiinnnnttttppppttttrrrr;;;;
  1866.  
  1867.             ccccllllaaaassssssss AAAA {{{{
  1868.             ppppuuuubbbblllliiiicccc::::
  1869.                 AAAA ((((iiiinnnntttt **** iiii))));;;;
  1870.             }}}};;;;
  1871.  
  1872.             AAAA::::::::AAAA ((((iiiinnnnttttppppttttrrrr iiii)))) {{{{
  1873.             }}}}
  1874.  
  1875.             the parser will print the error message "no record for
  1876.             method A::A?" and terminate processing of the file.
  1877.  
  1878.             Workaround: analyze code like this in scanner mode, or
  1879.             change the type signatures so that the definition and
  1880.             declaration match.
  1881.  
  1882.           +o _c_v_s_t_a_t_i_c's parser mode is better at building a new
  1883.             database than at modifying an existing one.  If you
  1884.             build a parser-mode database and then change a file and
  1885.             reparse it, the database will grow each time you rescan
  1886.             the file.  Not all space is reclaimed.  Additional arcs
  1887.             may appear in the Call Tree view representing defunct
  1888.             call site information.
  1889.  
  1890.             Workaround: After a few files are modified and re-
  1891.             analyzed, it is best to use Force Scan to rebuild the
  1892.             entire parser-mode database. For a large code base that
  1893.             is slow to parse, you can use the -batch flag to
  1894.             rebuild the database overnight.
  1895.  
  1896.           +o Functions generated by templates are recognized and
  1897.             displayed by _c_v_s_t_a_t_i_c, but it treats them as external
  1898.             functions:  functions that are declared or used within
  1899.             the fileset but are not defined there. Consequently,
  1900.             they do not appear in the results of the ``Query List
  1901.             All Functions''.
  1902.  
  1903.             Workaround: Use specific queries about these functions,
  1904.             like ``Where Function Called'', or add them manually to
  1905.             Call Tree graphs.
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.                                   - 30 -
  1919.  
  1920.  
  1921.  
  1922.           +o The function "main" appears in the list of Functions
  1923.             Not Called, if it is not called explicitly from the
  1924.             source code.  ("main" is rarely called explicitly.)
  1925.  
  1926.             Workaround: You can add the function "main" manually to
  1927.             any graphical display of functions.
  1928.  
  1929.           +o Graphical display of a single member function called
  1930.             through derived classes is incomplete.  If a C++ member
  1931.             function FFFFoooooooo::::::::FFFFuuuunnnncccc is called through classes derived
  1932.             from the ccccllllaaaassssssss FFFFoooooooo, each derived function FFFFuuuunnnncccc will
  1933.             appear as a separate function in the Text View list of
  1934.             functions.  However, only one node will appear for FFFFuuuunnnncccc
  1935.             in the Call Tree View.
  1936.  
  1937.             Workaround: To see the full list of definitions and
  1938.             calls of FFFFuuuunnnncccc, use Text Mode.  If you double click on
  1939.             the definition of one of the derived FFFFuuuunnnnccccs, you will
  1940.             navigate either to the definition of the function (if
  1941.             you click on the version in FFFFoooooooo), or to the definition
  1942.             of the derived class through which FFFFuuuunnnncccc was called.
  1943.  
  1944.           +o If you are analyzing C++ code in which multiple non-
  1945.             member functions have the same name, _c_v_s_t_a_t_i_c will
  1946.             think they are all the same function with one
  1947.             definition and several declarations.
  1948.  
  1949.             Workaround: You can get to the definitions by using the
  1950.             ``Where Defined'' and ``Where Declared'' queries on
  1951.             functions.
  1952.  
  1953.           +o When you first bring up _c_v_s_t_a_t_i_c, if you switch the
  1954.             view from Text View to a graph view before building the
  1955.             parser database and doing your first query, the graph
  1956.             may incorrectly display as empty.
  1957.  
  1958.             Workaround:  Stay in Text View to perform your first
  1959.             query, and then switch to whichever graph view you
  1960.             wish.  Or, if you have already brought up _c_v_s_t_a_t_i_c in a
  1961.             graph view and built the database, hit ``Rescan'' in
  1962.             the Admin menu, and then redo your query.
  1963.  
  1964.  
  1965.        5.6  _W_o_r_k_S_h_o_p__C_+_+__B_r_o_w_s_e_r
  1966.  
  1967.           +o The _C++ _B_r_o_w_s_e_r currently works only on files in the
  1968.             parser fileset.  So if you have a fileset which has
  1969.             only files in the scanner fileset, the browser will not
  1970.             work. To generate the database, you have to put files
  1971.             in the parser fileset and issue a rebuild in _c_v_s_t_a_t_i_c.
  1972.             Once the database is created you can use Browser to
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.                                   - 31 -
  1985.  
  1986.  
  1987.  
  1988.             examine the C++ classes.
  1989.  
  1990.           +o When using the C++ Browser, if you make changes to the
  1991.             code in the files that are present in the fileset, the
  1992.             changes will not be reflected in the information
  1993.             presented by the C++ Browser until you issue a Rescan
  1994.             command in _c_v_s_t_a_t_i_c, as follows:
  1995.  
  1996.             *    Make your changes.
  1997.  
  1998.             *    Exit the C++ Browser (but not cvstatic).
  1999.  
  2000.             *    Issue a FFFFoooorrrrcccceeee SSSSccccaaaannnn from the cvstatic AAAAddddmmmmiiiinnnn menu.
  2001.  
  2002.             *    Restart the browser by selecting AAAAddddmmmmiiiinnnn/CCCC++++++++ BBBBrrrroooowwwwsssseeeerrrr
  2003.                  menu in cvstatic.
  2004.  
  2005.             Incident 186990.
  2006.  
  2007.           +o When using the C++ browser, if you create and close (or
  2008.             quit) the Class Graph or Call Graph windows many times,
  2009.             some times you may find that it will make the tool core
  2010.             dump or exit with X errors. This is due to some known
  2011.             defects in deletion of widgets in Xm and Sgm.
  2012.  
  2013.             Incident 204472.
  2014.  
  2015.           +o Duplicate class definitions encountered in your files
  2016.             in the parser fileset will end up as a single class
  2017.             with accumulating members from both the definitions.
  2018.             This happens when the file defining the class is
  2019.             included from two different paths or there are two
  2020.             genuine class definitions for the same class name in
  2021.             your fileset.
  2022.  
  2023.             Incident 206922.
  2024.  
  2025.           +o If you use typedefs, and use it to give alternate names
  2026.             to classes (as in _t_y_p_e_d_e_f _c_l_a_s_s _A _B;) - you may that
  2027.             the Build Window shows some warnings about not finding
  2028.             the class B and that the information collected about
  2029.             the usage of class A will be missing many of the
  2030.             references through its typedef B.
  2031.  
  2032.             This kind of typedef is more commonly found in template
  2033.             code. There is no good workaround currently, other than
  2034.             not using the typedef in question.
  2035.  
  2036.             Incident 217830.
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.                                   - 32 -
  2051.  
  2052.  
  2053.  
  2054.           +o If you use typedefs, and use it inconsistently in
  2055.             declaring and defining class members (as in the
  2056.             following example), you will find that information
  2057.             regarding those members is either missing or faulty.
  2058.             The workaround is to use the same prototype at the
  2059.             point of definition as at the point of declaration.
  2060.  
  2061.                 ttttyyyyppppeeeeddddeeeeffff iiiinnnntttt IIIINNNNTTTT;;;;
  2062.                 ccccllllaaaassssssss AAAA {{{{
  2063.                    vvvvooooiiiidddd ffffoooooooo ((((IIIINNNNTTTT))));;;;
  2064.                 }}}};;;;
  2065.  
  2066.                 vvvvooooiiiidddd AAAA::::::::ffffoooooooo ((((iiiinnnntttt vvvvaaaallll)))) ............   //////// ggggeeeettttssss wwwwaaaarrrrnnnniiiinnnngggg,,,, aaaannnndddd iiiissss mmmmiiiissssssssiiiinnnngggg
  2067.                                             //////// ffffrrrroooommmm ssssttttaaaattttiiiicccc aaaannnnaaaallllyyyyssssiiiissss iiiinnnnffffoooo....
  2068.  
  2069.             Incident 184455.
  2070.  
  2071.           +o Usage information for template classes is managed only
  2072.             on a per-instantiation basis.  If you use templates in
  2073.             your code, then each instantiation, and the template
  2074.             itself, will show up as classes in the C++ Browser.
  2075.  
  2076.             For instance, if you have a template class Foo<T>, then
  2077.             there will be a class called FOO<T> and classes FOO<A>,
  2078.             FOO<B> etc., for the template definition prototype of
  2079.             FOO and its instantiations with A, B, etc.,
  2080.             respectively. And the usage information on FOO<T>
  2081.             currently shown is not the amalgamation of usage
  2082.             information on its instantiations FOO<A>, FOO<B>, etc.
  2083.  
  2084.           +o Be careful about overwriting man pages which are
  2085.             generated using the automatic class man page generation
  2086.             facility.
  2087.  
  2088.             When you generate a manpage for a class, through the
  2089.             C++ browser, you get a skeleton, in which you have to
  2090.             fill in all the descriptions. Please remember that if
  2091.             you change the class and generate a new man page for
  2092.             that class again, your changes to the file will be lost
  2093.             if you ignore the man page overwrite warning dialog.
  2094.  
  2095.             To avoid losing your changes to a manpage file
  2096.             generated by C++ Browser do the following:
  2097.  
  2098.             *    Move the existing manpage out of the way to some
  2099.                  other file.
  2100.  
  2101.             *    Generate the new (skeleton) man page.
  2102.  
  2103.             *    Merge the changes from the saved file to the new
  2104.                  man page generated by the C++ Browser.
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.                                   - 33 -
  2117.  
  2118.  
  2119.  
  2120.           +o When you use an application which allocates lot of
  2121.             colors in the default color map and then use cvstatic
  2122.             or C++ browser to bring up graphs, you might get all
  2123.             black nodes with un-readable text. The only known
  2124.             workaround to this problem is to kill the X server and
  2125.             login again. Be sure that you bring up cvstatic before
  2126.             you bring up the offending application. This problem
  2127.             has been seen with viewing books which have full color
  2128.             pictures.
  2129.  
  2130.  
  2131.        5.7  _W_o_r_k_S_h_o_p__P_e_r_f_o_r_m_a_n_c_e__A_n_a_l_y_z_e_r
  2132.  
  2133.           +o On IRIX 6.2, certain large programs will use a linker-
  2134.             feature called the multi-got feature.  The performance
  2135.             analyzer will issue an error message if this occurs,
  2136.             and you should contact customer support for an updated
  2137.             version of the analyzer.
  2138.  
  2139.           +o On IRIX 6.2, Ideal-time experiments are not supported
  2140.             for corded n32 and n64 executables.  The performance
  2141.             analyzer will issue an error message if this occurs.
  2142.  
  2143.           +o Important:  You should remove any old instrumentation
  2144.             cache directories, _e._g., /_u_s_r/_t_m_p/_c_v_i_n_s_t_r_l_i_b, prior to
  2145.             using this version of WorkShop:
  2146.  
  2147.             %%%% rrrrmmmm ----rrrrffff ////uuuussssrrrr////ttttmmmmpppp////ccccvvvviiiinnnnssssttttrrrrlllliiiibbbb
  2148.  
  2149.           +o WS 2.5.1 MP linpackd CPU time and Ideal-time show bogus
  2150.             times on 5.3 (Incident 321828)
  2151.  
  2152.           +o On IRIX 6.1 on R8000 systems, _c_v_p_e_r_f and _p_r_o_f report
  2153.             somewhat different cycle counts and ideal-time, from
  2154.             the same counts data.  The instruction counts reported
  2155.             match.  Each is internally consistent, but they differ
  2156.             because they are using somewhat different machine
  2157.             models for the computation.  Since the time and cycles
  2158.             are idealized in both cases, the discrepancy may be
  2159.             ignored; both will correctly show the places in the
  2160.             code where the most time is spent (Incident 292498).
  2161.  
  2162.           +o Running the Bottleneck and Total-Time experiments
  2163.             significantly slow the execution of some programs
  2164.             because of the time it takes to unwind the stack.
  2165.  
  2166.           +o _c_v_p_e_r_f is not backwards-compatible with experiments
  2167.             recorded on prior WorkShop releases, and will typically
  2168.             core dump on them.
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.                                   - 34 -
  2183.  
  2184.  
  2185.  
  2186.           +o Instrumenting _l_i_b_c with the PC-sampling option will
  2187.             fail in IRIX 5.3 because there is not enough address
  2188.             space left for text and data sections (Incident
  2189.             #223912).  These experiments work in IRIX 6.2.
  2190.  
  2191.             Workaround:  There is no workaround for this problem on
  2192.             IRIX 5.3.
  2193.  
  2194.           +o The Performance Analyzer may fail on experiments on
  2195.             executables that load very many DSOs (more than several
  2196.             hundred) (Incident #290637).
  2197.  
  2198.           +o Ideal-time and CPU-time experiments on n32 executables
  2199.             that do multiple dlopen/dlsym/dlclose operations may
  2200.             fail (Incident #291951).
  2201.  
  2202.           +o Ideal-time and CPU-time experiments on executables that
  2203.             use Load-linked/ Store-conditional instructions may
  2204.             fail, because the instrumenation may insert memory
  2205.             references between the instructions (Incident #291777).
  2206.  
  2207.           +o Memory leak experiments on programs that fork may
  2208.             produce misleading data.  For example, a child process
  2209.             may free a block allocated in the parent, which will
  2210.             appear as a bad free.  (Incident #202710)
  2211.  
  2212.           +o During data collection, the collector, _c_v_m_o_n, might run
  2213.             out of disk space.  In this case, it posts an error
  2214.             pop-up to the effect of ``bead write failed: no space
  2215.             left on device''.
  2216.  
  2217.             Workaround: Kill the debugger, free up sufficient space
  2218.             on the disk, and start the run again.
  2219.  
  2220.           +o The Performance Analyzer does not support COFF
  2221.             executables.
  2222.  
  2223.           +o The Performance tools can collect a great deal of data,
  2224.             and easily fill a disk.  For typical programs, basic-
  2225.             block sampling can collect between 0.25 and 2 Mbytes of
  2226.             data at each sample point.  PC sampling data can amount
  2227.             to between 0.25 and 6 Mbytes for each sample.
  2228.  
  2229.             Workaround: Use care in specifying how many samples you
  2230.             take to avoid this problem.  Be especially careful in
  2231.             using Pollpoint sampling; it should normally be used
  2232.             collecting only callstacks, not function counts,
  2233.             basic-block counts, or PC sampling data.  Sampling is
  2234.             not expensive in tracing experiments.
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.                                   - 35 -
  2249.  
  2250.  
  2251.  
  2252.           +o The Main View has a notion of a default trap that is a
  2253.             stop trap if data collection has not been enabled in
  2254.             the Performance Panel (where ``enabled'' means after
  2255.             _A_c_c_e_p_t or _O_K was clicked), and a sample trap if it has
  2256.             been enabled.  This setting is independent of the
  2257.             default trap set in the Trap Manager.  Clicking in the
  2258.             margin of the MainView source window sets or clears the
  2259.             MainView default trap, and does not affect a trap of
  2260.             the other type.
  2261.  
  2262.           +o _m_a_l_l_o_c/_f_r_e_e traces can be quite voluminous and
  2263.             difficult to process in Heap View.  When doing
  2264.             _m_a_l_l_o_c/_f_r_e_e tracing, be careful to design your
  2265.             experiments to exercise only those regions of your code
  2266.             that are problematic, and minimize the amount of trace
  2267.             data collected.  It is difficult to estimate the volume
  2268.             of data produced.  Each event writes 20 to 80 bytes, or
  2269.             more, depending on the depth of the callstack at the
  2270.             time of the call. A 10-minute experiment with the
  2271.             WorkShop Performance Analyzer wrote 140 Mbytes of trace
  2272.             data.  Reading this experiment took ~12 minutes on a
  2273.             256-MB Onyx machine.
  2274.  
  2275.           +o The WorkShop Performance Analyzer can record
  2276.             experiments on MP FORTRAN programs, but there are a
  2277.             number of anomalies in the displayed data that require
  2278.             explanation.  For all FORTRAN MP compilations, parallel
  2279.             loops within the program are represented as subroutines
  2280.             with names relating to the source routine in which they
  2281.             are embedded.  The naming conventions for these
  2282.             subroutines are different for 32-bit and 64-bit
  2283.             compilations
  2284.  
  2285.             For example, in the linpack benchmark, most of the time
  2286.             spent is in the routine _D_A_X_P_Y, which can be
  2287.             parallelized.  In a 64-bit MP version, the routine has
  2288.             the name "DAXPY", but most of that work is done in the
  2289.             MP routine named "DAXPY.PREGION1".  In a 32-bit
  2290.             version, the _D_A_X_P_Y routine is named "daxpy_", and the
  2291.             MP routine "_daxpy_519_aaab_".
  2292.  
  2293.             In both cases, for an ideal time experiment on a
  2294.             uniprocessor -_g run, the inclusive and exclusive
  2295.             function level times are correct.  The source
  2296.             annotations, however, behave differently and
  2297.             incorrectly in most cases.
  2298.  
  2299.             In 64-bit source annotations, the exclusive time is
  2300.             correctly shown for each line, but the inclusive time
  2301.             for the first line of the loop (_d_o statement) includes
  2302.             the time spent in the loop body. This same time appears
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.                                   - 36 -
  2315.  
  2316.  
  2317.  
  2318.             on the lines comprising the loop's body, in effect,
  2319.             representing a double-counting.  When used in
  2320.             conjunction with WorkShop Pro MPF's Parallel Analyzer
  2321.             View, the loop performance data will incorrectly also
  2322.             reflect the double counting, and the time will not be
  2323.             always shown as a percentage:  whenever it would exceed
  2324.             100%, it is shown as <_n/_a>.  The numerical time value
  2325.             shown reflects the double counting.
  2326.  
  2327.             In 32-bit source annotations, the exclusive time is
  2328.             incorrectly shown for the line comprising the loop's
  2329.             body, as the line-level data for the loop-body routine
  2330.             ("_daxpy_519_aaab_") does not refer to proper lines.
  2331.             If the program was compiled with the -_m_p__k_e_e_p flag, the
  2332.             line-level data should refer to the temporary files
  2333.             that are saved from the compilation, but the temporary
  2334.             files do not contain that information, so no source or
  2335.             disassembly data can be shown.  The disassembly data
  2336.             for the main routine does not show the times for the
  2337.             loop-body.
  2338.  
  2339.             If the 32-bit program was compiled without -_m_p__k_e_e_p,
  2340.             the line-level data for the loop-body routine is
  2341.             incorrect, with most lines referred to line 0 of the
  2342.             file, and the rest to other lines at seemingly random
  2343.             places in the file.  Consequently, spurious annotations
  2344.             will appear on these other lines.  Disassembly
  2345.             correctly shows the instructions, and their data, but
  2346.             the line numbers shown are wrong.  MPF's Parallel
  2347.             Analyzer correctly shows the loop data in most cases,
  2348.             but the same incorrect line numbers can cause data
  2349.             relating to one loop to show up in other parts of the
  2350.             program.  This reflects what is essentially the same
  2351.             double-counting problem as seen in 64-bits, but the
  2352.             extra counts go to other places in the file, rather
  2353.             than the first line of the loop.
  2354.  
  2355.             NNNNOOOOTTTTEEEE:::: We recommend against using the -_m_p__k_e_e_p flag.
  2356.  
  2357.           +o For MP experiments, switching between threads will
  2358.             cause the calipers to change to points valid for the
  2359.             new thread. Switching back may use different points,
  2360.             and therefore, show different numbers. Set the calipers
  2361.             manually after switching to ensure proper placement.
  2362.  
  2363.           +o For MP experiments, stopping one thread can cause the
  2364.             notion of time in other threads to get confused.  It is
  2365.             not recommended.
  2366.  
  2367.           +o The inclusive data shown in _c_v_p_e_r_f represents the
  2368.             instruction counts and/or PC sampling data summed over
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.                                   - 37 -
  2381.  
  2382.  
  2383.  
  2384.             the routine and those routines that it calls.  The
  2385.             computations are based on a heuristic that assumes that
  2386.             all calls from all callers are equivalent.  For
  2387.             programs where this heuristic is not applicable, for
  2388.             example, where one call to a matrix-multiply routine is
  2389.             for matrices of order four, while a second call is for
  2390.             matrices of order 100, the cumulative data may be
  2391.             misleading.
  2392.  
  2393.           +o Line-level data assigns a value to a line equal to the
  2394.             highest value for any instructions attributed to that
  2395.             line.  It can be confusing, because compiler
  2396.             optimizations often rearrange the code in ways that is
  2397.             non-obvious.  Looking at a disassembly view of the data
  2398.             can help.
  2399.  
  2400.           +o Line-level data from assembler routines can be
  2401.             misleading.  The symbol table often has instructions
  2402.             attributed to the wrong source line.
  2403.  
  2404.           +o In some cases, line number data for a C++ routine that
  2405.             uses inline virtual functions defined in an included
  2406.             file gets the line numbers incorrectly displayed as if
  2407.             they came from the file in which the defining file is
  2408.             included.  This causes incorrect line-level data to
  2409.             show at the lines in the original file.  The
  2410.             Disassembly View in _c_v_p_e_r_f shows performance data for
  2411.             each instruction, and may help disambiguate
  2412.             attribution.
  2413.  
  2414.           +o _c_v_p_e_r_f filters out nodes and arcs that were not
  2415.             executed during the current caliper setting.  This
  2416.             feature can lead to confusing displays, where nodes
  2417.             that are known to be in the program do not appear.
  2418.  
  2419.             Workaround: The Preferences menu can be used to disable
  2420.             the filtering.
  2421.  
  2422.           +o _c_v_p_e_r_f does not support live performance experiments.
  2423.             That is, you should not bring up _c_v_p_e_r_f until the
  2424.             experiment is over.  If you do, it will not update as
  2425.             more data is recorded.
  2426.  
  2427.           +o Performance experiments on multi-process applications
  2428.             can occasionally be unreliable if sample events are
  2429.             quickly preceded by process creation, or succeeded by
  2430.             process termination.
  2431.  
  2432.           +o Heap View scrolls poorly and blocks flash on large
  2433.             experiments.  Its functionality has been mostly
  2434.             subsumed by Leak View, Malloc View, and Malloc Error
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.                                   - 38 -
  2447.  
  2448.  
  2449.  
  2450.             View.  (Incident# 67628)
  2451.  
  2452.           +o Callstacks may be wrong in MP experiments.  (Incident#
  2453.             189826)
  2454.  
  2455.           +o Pollpoint sampling will fail if the target process
  2456.             forks, and the parent exits before the child.
  2457.             (Incident #186429)
  2458.  
  2459.  
  2460.        5.8  _W_o_r_k_S_h_o_p__T_e_s_t_e_r
  2461.  
  2462.        5.8.1  _W_o_r_k_S_h_o_p__T_e_s_t_e_r__L_i_m_i_t_a_t_i_o_n_s
  2463.  
  2464.           +o Instrumented programs can increase in size by a factor
  2465.             of 2X to 5X.  However, DSO caching and sharing
  2466.             alleviates this problem greatly.
  2467.  
  2468.           +o Block and branch coverage are at the assembly language
  2469.             level.  They can provide useful metrics and do map back
  2470.             to the source lines.  Note that several assembly branch
  2471.             instructions may map back to the same source line.  To
  2472.             see the C, C++, and Fortran source level blocks and
  2473.             branches, use _c_v_c_o_v _l_s_s_o_u_r_c_e.
  2474.  
  2475.           +o Compilation with the debug flag -_g builds assembly
  2476.             language branches and blocks that can never be
  2477.             executed.  This adversely affects overall coverage.  By
  2478.             compiling with "O1" (the default), some of the unused
  2479.             assembly branches and blocks are not built.  This gives
  2480.             a more accurate block and branch coverage metric.
  2481.             Function and arc coverage are unaffected by compile
  2482.             flags.
  2483.  
  2484.           +o C++ in-line functions are not counted as functions
  2485.             unless they are out-of-lined by the compiler.
  2486.  
  2487.           +o By default, arguments of functions are not displayed in
  2488.             query results.  This can be confusing for C++
  2489.             overloaded functions because there is no way to
  2490.             distinguish between them.  To work around this problem,
  2491.             use the -_a_r_g option to show full function signatures.
  2492.  
  2493.           +o The default size of the SourceView annotation canvas
  2494.             may not be large enough to hold very large counts.  The
  2495.             resource name for setting canvas width for SourceView
  2496.             is "canvasWidth".  The default value is 60.  The user
  2497.             can modify this width by modifying the following
  2498.             resource found in the Cvxcov app-defaults file,
  2499.             "Cvxcov*test*testData*canvasWidth".
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.                                   - 39 -
  2513.  
  2514.  
  2515.  
  2516.           +o _T_e_s_t_e_r currently uses object level instrumentation.
  2517.             This has several advantages:
  2518.  
  2519.                 ((((1111)))) CCCCoooovvvveeeerrrraaaaggggeeee ddddaaaattttaaaa ccccaaaannnn bbbbeeee oooobbbbttttaaaaiiiinnnneeeedddd wwwwiiiitttthhhhoooouuuutttt aaaacccccccceeeessssssss ttttoooo tttthhhheeee
  2520.                     ssssoooouuuurrrrcccceeee ccccooooddddeeee....
  2521.                 ((((2222)))) CCCCoooovvvveeeerrrraaaaggggeeee ddddaaaattttaaaa ccccaaaannnn bbbbeeee oooobbbbttttaaaaiiiinnnneeeedddd wwwwiiiitttthhhhoooouuuutttt rrrreeeeccccoooommmmppppiiiillllaaaattttiiiioooonnnn////rrrreeeebbbbuuuuiiiilllldddd....
  2522.                 ((((3333)))) TTTThhhhiiiissss ssssuuuuppppppppoooorrrrttttssss CCCC,,,, CCCC++++++++,,,, aaaannnndddd FFFFoooorrrrttttrrrraaaannnn wwwwiiiitttthhhhoooouuuutttt ssssppppeeeecccciiiiaaaallll
  2523.                     llllaaaannnngggguuuuaaaaggggeeee ssssuuuuppppppppoooorrrrtttt ffffrrrroooommmm tttthhhheeee ccccoooommmmppppiiiilllleeeerrrrssss....
  2524.  
  2525.             This has several disadvantages:
  2526.  
  2527.                 ((((1111)))) BBBBlllloooocccckkkk aaaannnndddd bbbbrrrraaaannnncccchhhh ccccoooouuuunnnnttttssss aaaarrrreeee aaaatttt tttthhhheeee aaaasssssssseeeemmmmbbbbllllyyyy llllaaaannnngggguuuuaaaaggggeeee lllleeeevvvveeeellll....
  2528.                 ((((2222)))) MMMMoooorrrreeee ddddeeeettttaaaaiiiilllleeeedddd ccccoooovvvveeeerrrraaaaggggeeee rrrreeeeqqqquuuuiiiirrrreeeessss kkkknnnnoooowwwwlllleeeeddddggggeeee ooooffff tttthhhheeee
  2529.                     llllaaaannnngggguuuuaaaaggggeeee sssseeeemmmmaaaannnnttttiiiiccccssss.... FFFFoooorrrr eeeexxxxaaaammmmpppplllleeee,,,, hhhhaaaassss eeeevvvveeeerrrryyyy ppppoooossssssssiiiibbbblllleeee ccccaaaasssseeee
  2530.                     iiiinnnn aaaa mmmmuuuullllttttiiiipppplllleeee ccccoooonnnnddddiiiittttiiiioooonnnnaaaallll ffffiiiirrrreeeedddd dddduuuurrrriiiinnnngggg tttteeeessssttttiiiinnnngggg....
  2531.  
  2532.           +o _W_e_a_k _e_x_t_e_r_n_a_l_s refer to an aliasing facility used by
  2533.             the compilation environment.  For example, while user
  2534.             programs may call the function "read", the actual
  2535.             function name in the C library that implements "read"
  2536.             is "_read". In this case, "read" is a weak external for
  2537.             "_read".  If the user CONSTRAINS coverage on either
  2538.             name, _T_e_s_t_e_r will report the results correctly.
  2539.             However, _T_e_s_t_e_r will choose the name used to implement
  2540.             the function, in this case "_read".
  2541.  
  2542.           +o -_f_u_n_c__p_a_t_t_e_r_n is a function pattern used in the
  2543.             following _c_v_c_o_v subcommands: _l_s_b_l_o_c_k, _l_s_b_r_a_n_c_h, _l_s_f_u_n,
  2544.             _l_s_t_r_a_c_e.  Currently, only the following "patterns" are
  2545.             matched.
  2546.  
  2547.                 """"DDDDSSSSOOOO::::****""""              -------- aaaallllllll ffffuuuunnnnccccttttiiiioooonnnnssss iiiinnnn aaaa DDDDSSSSOOOO
  2548.                 DDDDSSSSOOOO::::ffffuuuunnnnccccttttiiiioooonnnn____nnnnaaaammmmeeee    -------- ssssppppeeeecccciiiiffffiiiicccc ffffuuuunnnnccccttttiiiioooonnnn iiiinnnn aaaa DDDDSSSSOOOO
  2549.                 ffffuuuunnnnccccttttiiiioooonnnn____nnnnaaaammmmeeee        -------- ffffuuuunnnnccccttttiiiioooonnnn____nnnnaaaammmmeeee iiiinnnn mmmmaaaaiiiinnnn pppprrrrooooggggrrrraaaammmm aaaannnndddd ddddssssoooo''''ssss
  2550.                 <<<< ooooppppttttiiiioooonnnn nnnnooootttt uuuusssseeeedddd >>>>  -------- aaaallllllll ffffuuuunnnnccccttttiiiioooonnnnssss aaaarrrreeee iiiinnnncccclllluuuuddddeeeedddd iiiinnnn qqqquuuueeeerrrryyyy
  2551.  
  2552.           +o Sharing of the WorkShop Performance Analyzer
  2553.             performance experiment data is supported in _c_v_c_o_v but
  2554.             not in _c_v_x_c_o_v of this release.
  2555.  
  2556.           +o Output of query results to a printer is not supported
  2557.             in this release.  As a workaround, the user can save
  2558.             query results to a file, and then send that file to a
  2559.             printer.
  2560.  
  2561.           +o Experiment data for test sets/test groups cannot be
  2562.             moved/copied (mv, cp) without invalidating the data.
  2563.             Leaf tests can be moved/copied.
  2564.  
  2565.           +o Both the _l_s_t_r_a_c_e feature (argument tracing) and the
  2566.             _l_s_s_o_u_r_c_e feature (mapping block counts to actual
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.                                   - 40 -
  2579.  
  2580.  
  2581.  
  2582.             source) require the code to be compiled with -_g.  A
  2583.             notable exception to this is return value tracing which
  2584.             can trace the return value on functions that are not
  2585.             compiled with -_g (e.g., _l_i_b_c functions).
  2586.  
  2587.           +o _c_v_c_o_v requires that all instrumentation be performed
  2588.             before the experiment is run. This includes
  2589.             instrumentation for programs that are forked/exec'ed or
  2590.             sproc'ed.  _c_v_m_o_n is the program used by _c_v_c_o_v to
  2591.             monitor the experiment.  If _c_v_m_o_n encounters child
  2592.             processes, and the coverage experiment includes any
  2593.             executables other than the main program, then _c_v_m_o_n
  2594.             will instrument the executables for the child processes
  2595.             "on the fly".  _c_v_c_o_v will not process coverage for
  2596.             these "on the fly" instrumented executables, because
  2597.             _c_v_m_o_n has not used the correct coverage instrumentation
  2598.             criteria.  This can cause performance and space
  2599.             overhead.
  2600.  
  2601.           +o IRIX 5.1 and later binaries are supported (no support
  2602.             for IRIX 4.0.X binaries) including shared and
  2603.             nonshared.
  2604.  
  2605.           +o Instrumentation criteria ccccoooouuuunnnnttttssss must at least include
  2606.             ----bbbbbbbbccccoooouuuunnnntttt.  For example, if user want to test function
  2607.             pointers the instrumentation file must contain the
  2608.             following line,
  2609.  
  2610.                 CCCCOOOOUUUUNNNNTTTTSSSS ----bbbbbbbbccccoooouuuunnnnttttssss ----ffffppppccccoooouuuunnnnttttssss
  2611.  
  2612.           +o The current model for running instrumented programs
  2613.             requires that a separate process (_c_v_m_o_n) monitor the
  2614.             programs that are undergoing coverage analysis.  This
  2615.             requires existing test scripts to be modified in the
  2616.             following manner:
  2617.  
  2618.                 oooolllldddd ssssccccrrrriiiipppptttt::::
  2619.                    #### pppprrrrooooggggrrrraaaammmm aaaarrrrgggg1111 aaaarrrrgggg2222
  2620.                 nnnneeeewwww ssssccccrrrriiiipppptttt::::
  2621.                    #### ccccvvvvccccoooovvvv mmmmkkkktttteeeesssstttt ----ccccmmmmdddd """"pppprrrrooooggggrrrraaaammmm aaaarrrrgggg1111 aaaarrrrgggg2222"""" ----tttteeeessssttttnnnnaaaammmmeeee tttteeeesssstttt
  2622.                    #### ccccvvvvccccoooovvvv rrrruuuunnnntttteeeesssstttt tttteeeesssstttt
  2623.  
  2624.           +o There is potentially a large amount of data that can be
  2625.             captured when running multiple tests for large
  2626.             programs.  There are several options to the _r_u_n_t_e_s_t
  2627.             command that help manage this data.
  2628.  
  2629.             The -_n_o_a_r_c option is used to eliminate the capture of
  2630.             arc data in the experiment result (e.g., arc AB is
  2631.             equivalent to function A calls function B from line X).
  2632.             This significantly reduces the amount of overall count
  2633.  
  2634.  
  2635.  
  2636.  
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.                                   - 41 -
  2645.  
  2646.  
  2647.  
  2648.             information for the test coverage result.
  2649.  
  2650.             The -_r_m_s_u_b option is used to retain the overall results
  2651.             for the top level test set or test group, not for the
  2652.             individual subtests.  There are several interactions of
  2653.             the -_r_m_s_u_b and -_s_u_m options worth noting.  If the
  2654.             -_r_m_s_u_b option is used, a subsequent "runtest" using the
  2655.             -_s_u_m option will not accumulate the counts data for
  2656.             these two runs.  In this case only the second run will
  2657.             be in the top level test set/test group.  The -_s_u_m
  2658.             option will sum up data only according to the count
  2659.             data that is in all the subtests currently and does not
  2660.             use the information in the top level test set or test
  2661.             group.  When using the -_s_u_m and -_r_m_s_u_b options
  2662.             together, the count data will be accumulated and the
  2663.             subtest data will be deleted.
  2664.  
  2665.             The -_c_o_m_p_r_e_s_s option is used to compress experiment
  2666.             database using standard utility _c_o_m_p_r_e_s_s.
  2667.  
  2668.             The -_b_i_t_c_o_u_n_t option is used to convert experiment
  2669.             database to 1-bit-per-count format in recording
  2670.             experiment so that it will save disk space up to 32
  2671.             times. However, count number for basic blocks and
  2672.             branch coverage information will be lost.
  2673.  
  2674.           +o Source highlighting for statement that cover multiple
  2675.             lines only highlights the last line. This is due to a
  2676.             limitation in symbol table data generated by the
  2677.             compiler.  For example, in the following source
  2678.             statement only the second line will be highlighted:
  2679.  
  2680.                     pppprrrriiiinnnnttttffff((((""""TTTThhhhiiiissss iiiissss aaaa tttteeeesssstttt ffffoooorrrr %%%%ssss aaaatttt %%%%dddd"""",,,,
  2681.             0000            tttteeeessssttttnnnnaaaammmmeeee,,,,wwwwhhhhiiiicccchhhhDDDDrrrriiiivvvveeee))));;;;
  2682.  
  2683.           +o If the DSO cache directory has been removed, all the
  2684.             existing experiments may be invalid and _T_e_s_t_e_r may not
  2685.             work.
  2686.  
  2687.        5.8.2  _W_o_r_k_S_h_o_p__T_e_s_t_e_r__B_u_g_s
  2688.  
  2689.           +o Programs that use _a_r_g_v[_0] to build hardcoded filenames
  2690.             get confused by the renamed instrumented program (e.g.,
  2691.             <program> becomes <program_Instr>).
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.                                   - 42 -
  2711.  
  2712.  
  2713.  
  2714.        5.9  _W_o_r_k_S_h_o_p__E_n_v_i_r_o_n_m_e_n_t
  2715.  
  2716.           +o If the colors of your WorkShop windows look too dark to
  2717.             read or conversely if they look completely washed out,
  2718.             there may be a discrepancy between the gamma value you
  2719.             are using and the value your X server is using.  The
  2720.             default value of gamma on installation is 1.7 but users
  2721.             running X programs may prefer a value of 1.0.
  2722.  
  2723.             Workaround: If you change your gamma value, by running
  2724.             the _g_a_m_m_a program (installed with _e_o_e_2._s_w._g_l_t_o_o_l_s),
  2725.             restart your X server.
  2726.  
  2727.           +o When starting up WorkShop, if you see the messages
  2728.  
  2729.             ////uuuussssrrrr////ssssbbbbiiiinnnn////ttttttttsssseeeessssssssiiiioooonnnn:::: CCCCaaaannnn''''tttt iiiinnnniiiitttt ttttyyyyppppeeee ddddaaaattttaaaabbbbaaaasssseeee....
  2730.             ////uuuussssrrrr////ssssbbbbiiiinnnn////ttttttttsssseeeessssssssiiiioooonnnn:::: eeeexxxxiiiittttiiiinnnngggg
  2731.             WWWWaaaarrrrnnnniiiinnnngggg:::: ttttttttsssseeeessssssssiiiioooonnnn:::: ssssiiiigggg____hhhhaaaannnnddddlllleeeerrrr:::: NNNNoooo cccchhhhiiiilllldddd pppprrrroooocccceeeesssssssseeeessss
  2732.             ////uuuussssrrrr////ssssbbbbiiiinnnn////ttttttttsssseeeessssssssiiiioooonnnn:::: CCCCaaaannnn''''tttt iiiinnnniiiitttt sssseeeerrrrvvvveeeerrrr....
  2733.             ttttttttsssseeeessssssssiiiioooonnnn:::: CCCCaaaannnn''''tttt iiiinnnniiiitttt ttttyyyyppppeeee ddddaaaattttaaaabbbbaaaasssseeee....
  2734.             ttttttttsssseeeessssssssiiiioooonnnn:::: eeeexxxxiiiittttiiiinnnngggg
  2735.             WWWWaaaarrrrnnnniiiinnnngggg:::: ttttttttsssseeeessssssssiiiioooonnnn:::: ssssiiiigggg____hhhhaaaannnnddddlllleeeerrrr:::: NNNNoooo cccchhhhiiiilllldddd pppprrrroooocccceeeesssssssseeeessss
  2736.             ttttttttsssseeeessssssssiiiioooonnnn:::: CCCCaaaannnn''''tttt iiiinnnniiiitttt sssseeeerrrrvvvveeeerrrr....
  2737.             TTTTttttuuuuttttiiiillll:::: CCCCaaaannnnnnnnooootttt ooooppppeeeennnn oooouuuurrrr TTTToooooooollllTTTTaaaallllkkkk pppprrrroooocccceeeessssssss iiiidddd
  2738.             ttttttttuuuuttttiiiillll:::: CCCCoooouuuullllddddnnnn''''tttt ccccoooonnnnnnnneeeecccctttt ttttoooo ttttttttsssseeeessssssssiiiioooonnnn sssseeeerrrrvvvviiiicccceeee((((ssss))))....
  2739.  
  2740.             check if you have the _C_E_P_A_T_H environment variable set.
  2741.             ToolTalk will use the _C_E_P_A_T_H variable for its
  2742.             definition of where the types database are located.
  2743.             WorkShop expects to find them in the default system
  2744.             database, /_e_t_c/_t_t/_t_y_p_e_s._x_d_r. Unsetting this environment
  2745.             variable will fix the startup problem.
  2746.  
  2747.           +o When starting up WorkShop, you may occassionally see
  2748.             the message
  2749.  
  2750.             ////uuuussssrrrr////ssssbbbbiiiinnnn////ttttttttsssseeeessssssssiiiioooonnnn:::: WWWWaaaarrrrnnnniiiinnnngggg:::: ccccoooouuuullllddddnnnn''''tttt aaaaccccqqqquuuuiiiirrrreeee XXXX sssseeeelllleeeeccccttttiiiioooonnnn
  2751.  
  2752.             ToolTalk displays this message when its internal state
  2753.             notes that someone else (i.e. another _t_t_s_e_s_s_i_o_n) has
  2754.             already owned the X selection that it is trying to
  2755.             aquire.  This message is harmless and can be ignored.
  2756.  
  2757.           +o The network license mechanism used by WorkShop performs
  2758.             periodic checks to ensure that a license is available.
  2759.             Once obtained, a license is valid for 20 minutes. The
  2760.             license is validated every 10 minutes, and renewed for
  2761.             an additional 20 minutes if all is well. This process
  2762.             requires that WorkShop be actively running to be able
  2763.             to perform these checks. If the tool is unable to check
  2764.             the license server for 20 minutes, the license is lost,
  2765.  
  2766.  
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.                                   - 43 -
  2777.  
  2778.  
  2779.  
  2780.             and the tool must be restarted to get a new license.
  2781.             Therefore, suspending a WorkShop process (using <Ctrl-
  2782.             Z>, for example) for more than a few minutes loses the
  2783.             tool's license.
  2784.  
  2785.           +o The WorkShop environment works with one configuration
  2786.             management system at a time. This affects all users
  2787.             running WorkShop on that machine.
  2788.  
  2789.           +o The default for string data is to display it as a hex
  2790.             address.  If you prefer the behavior of showing a
  2791.             string for _c_h_a_r *, you can set ****aaaauuuuttttooooSSSSttttrrrriiiinnnnggggFFFFoooorrrrmmmmaaaatttt to
  2792.             TTTTrrrruuuueeee in your ._X_d_e_f_a_u_l_t_s.  This will automatically
  2793.             change the result format from the default to string for
  2794.             _c_h_a_r * and _c_h_a_r <_a_r_r_a_y> expressions in the
  2795.             ExpressionView, VarBrowser, and DataBrowser.
  2796.  
  2797.           +o Customers displaying to non-SGI X displays and having
  2798.             difficulties with ExecutionView startup (a busy cursor
  2799.             that never goes away) should try switching
  2800.             ****eeeexxxxeeeeccccuuuuttttiiiioooonnnnVVVViiiieeeewwww****TTTTeeeerrrrmmmmiiiinnnnaaaallllCCCCoooommmmmmmmaaaannnndddd in
  2801.             /_u_s_r/_W_o_r_k_S_h_o_p/_u_s_r/_l_i_b/_X_1_1/_a_p_p-_d_e_f_a_u_l_t_s/_C_v_m_a_i_n from the
  2802.             _x_w_s_h version to the commented out _x_t_e_r_m version.
  2803.  
  2804.  
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817.  
  2818.  
  2819.  
  2820.  
  2821.  
  2822.  
  2823.  
  2824.  
  2825.  
  2826.  
  2827.  
  2828.  
  2829.  
  2830.  
  2831.  
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.