HP 3000 Manuals

Debugging Threaded Applications [ DCE for the HP 3000 ] MPE/iX 5.0 Express III Documentation


DCE for the HP 3000

Debugging Threaded Applications 

The following are hints for debugging threaded applications:

   *   Set breakpoints for global data bugs - To simplify debugging
       problems involving unexpected changes in global data, use HPDEBUG
       to set task-wide data breakpoints.  Otherwise, make sure there is
       a breakpoint that every thread will hit.  Even when you are
       single-stepping, another thread can intervene between source
       statements executed by the thread you are following.  One way you
       can know that this is happening is if the intervening thread hits
       a breakpoint.

       You can prevent other threads from interveining while single
       stepping in HPDEBUG. This is done by setting the HPDEBUG
       environment variable SS_TERM_KEEPLOCK. Setting this variable
       causes you to hold the terminal semaphore for the current thread
       until a CONTINUE command is issued.  Effectively, no other thread
       is able to obtain the terminal semaphore and interfere with your
       debug session.  Another method is to create breakpoints within
       your task that have the "Stop-all-Threads" options.  This option,
       when hit by any thread in the task, stops execution of all threads
       in the task until a CONTINUE command is issued.  It is possible to
       create a deadlock situation when using SS_TERM_KEEPLOCK with
       "Stop-all-Threads" set in your task.

   *   Debugging a threaded server - Do not debug multiple threads in the
       server, debug one at a time.  To do this, set a breakpoint at the
       procedure you want to catch and continue.  Then make only one
       remote procedure call from the client; you will hit the
       breakpoint, step through until you locate the bug, then continue
       or quit.

   *   Debugging a threaded client - If the threads in a client do not
       interact, debug only one of them at a time.



MPE/iX 5.0 Express III Documentation