SAMPLE: Windows Application Produces Stack Trace

ID: Q92537


The information in this article applies to:
  • Microsoft Windows Software Development Kit (SDK) versions 3.0, 3.1


SUMMARY

STKTRACE is a sample Windows-based application that contains the complete code to obtain a stack trace of the "current task." The stack trace includes symbolic information extracted from the symbol files, similar to that produced by the Windows debug kernel at the time of a FatalExit. In this sample, the stack trace is logged into a buffer and output to a message box.

The STKTRACE sample uses the tool helper library and can be used in the Windows versions 3.0 and 3.1 environments because TOOLHELP.DLL is a redistributable.


MORE INFORMATION

The following file is available for download from the Microsoft Download Center. Click the file name below to download the file:

Stktrace.exe
For more information about how to download files from the Microsoft Download Center, please visit the Download Center at the following Web address
http://www.microsoft.com/downloads/search.asp
and then click How to use the Microsoft Download Center.


Usually, the Windows debug kernel produces a stack trace on the debug terminal when the SPACE BAR or ENTER key is pressed at the time of a FatalExit. For more information on stack traces produced by the debug kernel, query on the following words in the Microsoft Knowledge Base:
stack trace space bar
However, when you are writing a debugger or a large complex application, it might be necessary to produce stack traces in your application. Then, the STKTRACE sample code can be helpful.

This sample consists of two main modules, GETTRACE.C and GETSYMBOL.C, and a driver module, STKTRACE.C, which merely calls the API from the GETTRACE.C module. The GETTRACE.C module contains code to walk the stack of the current task by using the tool helper library and the GETSYMBOL.C module contains code to obtain symbol names from corresponding symbol (.SYM) files by using the symbol file format. These two modules can be plugged into any application or a DLL (dynamic-link library).

Note that the THSAMPLE application in the \SDK31\SAMPLES\TOOLHELP directory also illustrates how to produce stack traces for a given task that is not the current task. In contrast, the STKTRACE sample walks the stack of the current task by obtaining the register values from the stack and using the StackTraceCSIPFirst() and StackTraceNext() APIs from the tool helper library. Also, the STKTRACE sample provides symbolic information in the stack trace.

The GETSYM.C module provides symbolic information by using the symbol file format documented in the Microsoft Windows SDK version 3.1 "Programmer's Reference, Volume 4: Resources" manual. Given a segment:offset address, this module finds the "nearest" public symbol in the corresponding symbol (.SYM) file.

Additional query words: 3.00 3.10 softlib STKTRACE.EXE kbfile

Keywords : kbsample kb16bitonly kbWinOS310 kbWinOS300
Version : WINDOWS:3.0,3.1
Platform : WINDOWS
Issue type :


Last Reviewed: November 23, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.