Fixed winedbg watchpoints.

This commit is contained in:
Andreas Mohr 2000-07-10 13:05:17 +00:00 committed by Alexandre Julliard
parent 13ae2f5b8c
commit 522a9a90b9
1 changed files with 28 additions and 28 deletions

View File

@ -553,15 +553,15 @@ void DEBUG_EnableBreakpoint( int num, BOOL enable )
*/ */
static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval) static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval)
{ {
int i;
int found = -1; int found = -1;
#ifdef __i386__
int i;
/* Method 1 => get triggered watchpoint from context (doesn't work on Linux /* Method 1 => get triggered watchpoint from context (doesn't work on Linux
* 2.2.x) * 2.2.x)
*/ */
for (i = 0; i < next_bp; i++) for (i = 0; i < next_bp; i++)
{ {
#ifdef __i386__
DWORD val = 0; DWORD val = 0;
if (breakpoints[i].refcount && breakpoints[i].enabled && if (breakpoints[i].refcount && breakpoints[i].enabled &&
@ -576,10 +576,9 @@ static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval)
return i; return i;
} }
} }
#endif
} }
/* Method 1 failed, trying method2 */ /* Method 1 failed, trying method 2 */
/* Method 2 => check if value has changed among registered watchpoints /* Method 2 => check if value has changed among registered watchpoints
* this really sucks, but this is how gdb 4.18 works on my linux box * this really sucks, but this is how gdb 4.18 works on my linux box
@ -587,7 +586,6 @@ static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval)
*/ */
for (i = 0; i < next_bp; i++) for (i = 0; i < next_bp; i++)
{ {
#ifdef __i386__
DWORD val = 0; DWORD val = 0;
if (breakpoints[i].refcount && breakpoints[i].enabled && if (breakpoints[i].refcount && breakpoints[i].enabled &&
@ -601,13 +599,13 @@ static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval)
breakpoints[i].u.w.oldval = val; breakpoints[i].u.w.oldval = val;
found = i; found = i;
/* cannot break, because two watch points may have been triggered on /* cannot break, because two watch points may have been triggered on
* the same acces * the same access
* only one will be reported to the user (FIXME ?) * only one will be reported to the user (FIXME ?)
*/ */
} }
} }
#endif
} }
#endif
return found; return found;
} }
@ -667,30 +665,32 @@ void DEBUG_InfoBreakpoints(void)
*/ */
static BOOL DEBUG_ShallBreak( int bpnum ) static BOOL DEBUG_ShallBreak( int bpnum )
{ {
if ( breakpoints[bpnum].condition != NULL ) if ( breakpoints[bpnum].condition != NULL )
{ {
DBG_VALUE value = DEBUG_EvalExpr(breakpoints[bpnum].condition); DBG_VALUE value = DEBUG_EvalExpr(breakpoints[bpnum].condition);
if ( value.type == NULL ) if ( value.type == NULL )
{ {
/* /*
* Something wrong - unable to evaluate this expression. * Something wrong - unable to evaluate this expression.
*/ */
DEBUG_Printf(DBG_CHN_MESG, "Unable to evaluate expression "); DEBUG_Printf(DBG_CHN_MESG, "Unable to evaluate expression ");
DEBUG_DisplayExpr(breakpoints[bpnum].condition); DEBUG_DisplayExpr(breakpoints[bpnum].condition);
DEBUG_Printf(DBG_CHN_MESG, "\nTurning off condition\n"); DEBUG_Printf(DBG_CHN_MESG, "\nTurning off condition\n");
DEBUG_AddBPCondition(bpnum, NULL); DEBUG_AddBPCondition(bpnum, NULL);
} }
else if( !DEBUG_GetExprValue( &value, NULL) ) else if( !DEBUG_GetExprValue( &value, NULL) )
{ {
return FALSE; return FALSE;
} }
} }
if ( breakpoints[bpnum].skipcount > 0 && --breakpoints[bpnum].skipcount > 0 ) if ( breakpoints[bpnum].skipcount > 0 && --breakpoints[bpnum].skipcount > 0 )
return FALSE; return FALSE;
return (breakpoints[bpnum].u.b.func) ? (breakpoints[bpnum].u.b.func)() : TRUE; if ((breakpoints[bpnum].type == DBG_BREAK) && breakpoints[bpnum].u.b.func)
return breakpoints[bpnum].u.b.func();
return TRUE;
} }
/*********************************************************************** /***********************************************************************