Using Debugging Support
The following example uses the
WaitForDebugEvent and
ContinueDebugEvent functions to illustrate how a simple debugger might be organized.
DEBUG_EVENT DebugEv; // debugging event information
DWORD dwContinueStatus = DBG_CONTINUE; // exception continuation
for(;;)
{
// Wait for a debugging event to occur. The second parameter indicates
// that the function does not return until a debugging event occurs.
WaitForDebugEvent(&DebugEv, INFINITE);
// Process the debugging event code.
switch (DebugEv.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:
// Process the exception code. When handling
// exceptions, remember to set the continuation
// status parameter (dwContinueStatus). This value
// is used by the ContinueDebugEvent function.
switch (DebugEv.u.Exception.ExceptionRecord.ExceptionCode)
{
case EXCEPTION_ACCESS_VIOLATION:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.
case EXCEPTION_BREAKPOINT:
// First chance: Display the current
// instruction and register values.
case EXCEPTION_DATATYPE_MISALIGNMENT:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.
case EXCEPTION_SINGLE_STEP:
// First chance: Update the display of the
// current instruction and register values.
case DBG_CONTROL_C:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.
// Handle other exceptions.
}
case CREATE_THREAD_DEBUG_EVENT:
// As needed, examine or change the thread's registers
// with the GetThreadContext and SetThreadContext functions;
// and suspend and resume thread execution with the
// SuspendThread and ResumeThread functions.
case CREATE_PROCESS_DEBUG_EVENT:
// As needed, examine or change the registers of the
// process's initial thread with the GetThreadContext and
// SetThreadContext functions; read from and write to the
// process's virtual memory with the ReadProcessMemory and
// WriteProcessMemory functions; and suspend and resume
// thread execution with the SuspendThread and ResumeThread
// functions.
case EXIT_THREAD_DEBUG_EVENT:
// Display the thread's exit code.
case EXIT_PROCESS_DEBUG_EVENT:
// Display the process's exit code.
case LOAD_DLL_DEBUG_EVENT:
// Read the debugging information included in the newly
// loaded DLL.
case UNLOAD_DLL_DEBUG_EVENT:
// Display a message that the DLL has been unloaded.
case OUTPUT_DEBUG_STRING_EVENT:
// Display the output debugging string.
}
// Resume executing the thread that reported the debugging event.
ContinueDebugEvent(DebugEv.dwProcessId,
DebugEv.dwThreadId, dwContinueStatus);
}
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database