Troubleshooting program hangs: Difference between revisions

From OPC Labs Knowledge Base
No edit summary
No edit summary
Line 5: Line 5:


# Create a reproducible scenario in which the hang occurs, and write down the steps needed.
# Create a reproducible scenario in which the hang occurs, and write down the steps needed.
# Start the program under Visual Studio debugger ({{Style=menu|Debug -> Start Debugging}}) and trigger the hang. Alternatively, trigger the hang first, and then attach the Visual Studio debugger to the program ({{Style=menu|Debug -> Attach to Process}}). Make sure the proper code types for debugging are enabled (normally "{{Style=item|Managed (v4.6, v4.5, v4.0)}}" and "{{Style=item|Native}}").
# Start the program under Visual Studio debugger ({{Style=menu|Debug -> Start Debugging}}) and trigger the hang. Alternatively, trigger the hang first, and then attach the Visual Studio debugger to the program ({{Style=menu|Debug -> Attach to Process}}). When attaching, make sure the proper code types for debugging are enabled (normally "{{Style=item|Managed (v4.6, v4.5, v4.0)}}" and "{{Style=item|Native}}").
# Break into the debugger using {{Style=menu|Debug -> Break All}}.
# Break into the debugger using {{Style=menu|Debug -> Break All}}.
# Display the Threads window using {{Style=menu|Debug -> Windows -> Threads}}.
# Display the Threads window using {{Style=menu|Debug -> Windows -> Threads}}.

Revision as of 07:54, 5 January 2018

Some problems in the components used or in your code manifest themselves as "hangs": The application stops responding, the method call never returns (or multiple calls on several threads), notifications no longer come in, or a combination of these symptoms. Such problems are usually difficult to diagnose; they are often caused by "deadlocks" of simple, but also sometimes very complicated nature, resulting from a combination of various programming techniques and libraries.

The following procedure may help in analyzing the cause of the hang:

  1. Create a reproducible scenario in which the hang occurs, and write down the steps needed.
  2. Start the program under Visual Studio debugger (Debug -> Start Debugging) and trigger the hang. Alternatively, trigger the hang first, and then attach the Visual Studio debugger to the program (Debug -> Attach to Process). When attaching, make sure the proper code types for debugging are enabled (normally "Managed (v4.6, v4.5, v4.0)" and "Native").
  3. Break into the debugger using Debug -> Break All.
  4. Display the Threads window using Debug -> Windows -> Threads.
  5. In the Threads window, on each row in the table under the Location column, expand the call stack by clicking the down arrow on the left side of the column (if present).
  6. Right-click in the area of Threads window, and invoke the Select All command.
  7. Right-click in the area of Threads window, and invoke the Copy command.
  8. Paste the resulting into a text file and save it.
  9. If you have the capability to do so, analyze the contents of the file to check if the hang cause is not in your code.
  10. Deliver the text file to us for analysis (post on the forums, or send by email).

Tools other than Visual Studio may provide similar capabilities, but Visual Studio is preferred.

See also: Obtaining .NET call stacks in a COM application