Fix handling of breakpoint exceptions in KDB.

svn path=/trunk/; revision=12194
This commit is contained in:
Gregor Anich 2004-12-18 19:22:10 +00:00
parent fd0590d3cc
commit 35d320bd71
2 changed files with 24 additions and 10 deletions

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: kdb.c,v 1.35 2004/11/18 02:10:28 arty Exp $ /* $Id: kdb.c,v 1.36 2004/12/18 19:22:10 blight Exp $
* *
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/dbg/kdb.c * FILE: ntoskrnl/dbg/kdb.c
@ -1656,17 +1656,24 @@ KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
LONG BreakPointNr; LONG BreakPointNr;
ULONG ExpNr = (ULONG)TrapFrame->DebugArgMark; ULONG ExpNr = (ULONG)TrapFrame->DebugArgMark;
DbgPrint( ":KDBG:Entered:%s:%s\n", if (ExpNr != 1 && ExpNr != 3)
{
DbgPrint(":KDBG:Entered:%s:%s\n",
PreviousMode==KernelMode ? "kmode" : "umode", PreviousMode==KernelMode ? "kmode" : "umode",
AlwaysHandle ? "always" : "if-unhandled" ); AlwaysHandle ? "always" : "if-unhandled");
}
/* If we aren't handling umode exceptions then return */ /* If we aren't handling umode exceptions then return */
if( PreviousMode == UserMode && !KdbHandleUmode && !AlwaysHandle ) if (PreviousMode == UserMode && !KdbHandleUmode && !AlwaysHandle)
{
return kdContinue; return kdContinue;
}
/* If the exception would be unhandled (and we care) then handle it */ /* If the exception would be unhandled (and we care) then handle it */
if( PreviousMode == KernelMode && !KdbHandleHandled && !AlwaysHandle ) if (PreviousMode == KernelMode && !KdbHandleHandled && !AlwaysHandle)
{
return kdContinue; return kdContinue;
}
/* Exception inside the debugger? Game over. */ /* Exception inside the debugger? Game over. */
if (KdbEntryCount > 0) if (KdbEntryCount > 0)

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: catch.c,v 1.55 2004/11/20 17:45:15 arty Exp $ /* $Id: catch.c,v 1.56 2004/12/18 19:22:10 blight Exp $
* *
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/catch.c * FILE: ntoskrnl/ke/catch.c
@ -77,7 +77,10 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
Action = KdEnterDebuggerException (ExceptionRecord, Context, Tf); Action = KdEnterDebuggerException (ExceptionRecord, Context, Tf);
} }
if (Action == kdContinue) return; if (Action == kdContinue)
{
return;
}
if (Action != kdDoNotHandleException) if (Action != kdDoNotHandleException)
{ {
@ -167,8 +170,12 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
DPRINT("ExceptionRecord->ExceptionAddress = 0x%x\n", DPRINT("ExceptionRecord->ExceptionAddress = 0x%x\n",
ExceptionRecord->ExceptionAddress ); ExceptionRecord->ExceptionAddress );
#ifdef KDBG #ifdef KDBG
KdbEnterDebuggerException (ExceptionRecord, PreviousMode, Action = KdbEnterDebuggerException (ExceptionRecord, PreviousMode,
Context, Tf, TRUE); Context, Tf, TRUE);
if (Action == kdContinue)
{
return;
}
#endif #endif
KEBUGCHECKWITHTF(KMODE_EXCEPTION_NOT_HANDLED, 0, 0, 0, 0, Tf); KEBUGCHECKWITHTF(KMODE_EXCEPTION_NOT_HANDLED, 0, 0, 0, 0, Tf);
} }