mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-05 03:00:25 +00:00
Improves visual indication of existing watchpoints.
This commit is contained in:
parent
a67dccae5b
commit
ce16f79f04
|
@ -185,7 +185,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
vw_pauseMode = -1
|
vw_pauseMode = -1
|
||||||
vw_stepOver = 0
|
vw_stepOver = 0
|
||||||
vw_runToLine = 0
|
vw_runToLine = 0
|
||||||
vw_cmd$ = "watchpoint:" + MKL$(vw_tempIndex) + MKI$(LEN(vw_wpExpression$)) + vw_wpExpression$
|
vw_cmd$ = "watchpoint:" + MKL$(vw_tempIndex) + MKL$(LEN(vw_arrayIndexes$)) + vw_arrayIndexes$ + MKL$(vw_elementOffset) + MKI$(LEN(vw_wpExpression$)) + vw_wpExpression$
|
||||||
GOTO breakReached
|
GOTO breakReached
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
@ -598,7 +598,6 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
IF vw_i > 0 THEN
|
IF vw_i > 0 THEN
|
||||||
'remove existing watchpoint for the same variable/index/element
|
'remove existing watchpoint for the same variable/index/element
|
||||||
vw_j = CVL(MID$(vw_buf$, vw_i + 4, 4))
|
vw_j = CVL(MID$(vw_buf$, vw_i + 4, 4))
|
||||||
templen = LEN(vw_buf$)
|
|
||||||
vw_buf$ = LEFT$(vw_buf$, vw_i - 1) + MID$(vw_buf$, vw_i + vw_j + 8)
|
vw_buf$ = LEFT$(vw_buf$, vw_i - 1) + MID$(vw_buf$, vw_i + vw_j + 8)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ DIM SHARED IDEBuildModeChanged
|
||||||
DIM SHARED IdeInfo AS STRING
|
DIM SHARED IdeInfo AS STRING
|
||||||
DIM SHARED IdeContextHelpSF AS _BYTE
|
DIM SHARED IdeContextHelpSF AS _BYTE
|
||||||
|
|
||||||
DIM SHARED host&, debugClient&, hostport$, variableWatchList$
|
DIM SHARED host&, debugClient&, hostport$, variableWatchList$, watchpointList$
|
||||||
DIM SHARED vWatchReceivedData$(1 TO 1000), nextvWatchDataSlot
|
DIM SHARED vWatchReceivedData$(1 TO 1000), nextvWatchDataSlot
|
||||||
DIM SHARED startPausedPending AS _BYTE
|
DIM SHARED startPausedPending AS _BYTE
|
||||||
|
|
||||||
|
|
|
@ -506,6 +506,7 @@ FUNCTION ide2 (ignore)
|
||||||
REDIM IdeBreakpoints(iden) AS _BYTE
|
REDIM IdeBreakpoints(iden) AS _BYTE
|
||||||
REDIM IdeSkipLines(iden) AS _BYTE
|
REDIM IdeSkipLines(iden) AS _BYTE
|
||||||
variableWatchList$ = ""
|
variableWatchList$ = ""
|
||||||
|
watchpointList$ = ""
|
||||||
callstacklist$ = "": callStackLength = 0
|
callstacklist$ = "": callStackLength = 0
|
||||||
ideunsaved = -1
|
ideunsaved = -1
|
||||||
idechangemade = 1
|
idechangemade = 1
|
||||||
|
@ -602,6 +603,7 @@ FUNCTION ide2 (ignore)
|
||||||
REDIM IdeBreakpoints(iden) AS _BYTE
|
REDIM IdeBreakpoints(iden) AS _BYTE
|
||||||
REDIM IdeSkipLines(iden) AS _BYTE
|
REDIM IdeSkipLines(iden) AS _BYTE
|
||||||
variableWatchList$ = ""
|
variableWatchList$ = ""
|
||||||
|
watchpointList$ = ""
|
||||||
callstacklist$ = "": callStackLength = 0
|
callstacklist$ = "": callStackLength = 0
|
||||||
IF ideStartAtLine > 0 AND ideStartAtLine <= iden THEN
|
IF ideStartAtLine > 0 AND ideStartAtLine <= iden THEN
|
||||||
idecy = ideStartAtLine
|
idecy = ideStartAtLine
|
||||||
|
@ -1153,6 +1155,7 @@ FUNCTION ide2 (ignore)
|
||||||
IF idelayoutallow THEN idelayoutallow = idelayoutallow - 1
|
IF idelayoutallow THEN idelayoutallow = idelayoutallow - 1
|
||||||
|
|
||||||
variableWatchList$ = ""
|
variableWatchList$ = ""
|
||||||
|
watchpointList$ = ""
|
||||||
idecurrentlinelayouti = 0 'invalidate
|
idecurrentlinelayouti = 0 'invalidate
|
||||||
idefocusline = 0
|
idefocusline = 0
|
||||||
idechangemade = 0
|
idechangemade = 0
|
||||||
|
@ -6005,6 +6008,7 @@ FUNCTION ide2 (ignore)
|
||||||
REDIM IdeBreakpoints(1) AS _BYTE
|
REDIM IdeBreakpoints(1) AS _BYTE
|
||||||
REDIM IdeSkipLines(1) AS _BYTE
|
REDIM IdeSkipLines(1) AS _BYTE
|
||||||
variableWatchList$ = ""
|
variableWatchList$ = ""
|
||||||
|
watchpointList$ = ""
|
||||||
callstacklist$ = "": callStackLength = 0
|
callstacklist$ = "": callStackLength = 0
|
||||||
idet$ = MKL$(0) + MKL$(0): idel = 1: ideli = 1: iden = 1: IdeBmkN = 0
|
idet$ = MKL$(0) + MKL$(0): idel = 1: ideli = 1: iden = 1: IdeBmkN = 0
|
||||||
idesx = 1
|
idesx = 1
|
||||||
|
@ -6472,6 +6476,7 @@ SUB DebugMode
|
||||||
vWatchPanel.h = 5
|
vWatchPanel.h = 5
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
watchpointList$ = ""
|
||||||
vWatchPanel.w = 40
|
vWatchPanel.w = 40
|
||||||
vWatchPanel.x = idewx - vWatchPanel.w - 6
|
vWatchPanel.x = idewx - vWatchPanel.w - 6
|
||||||
vWatchPanel.y = 4
|
vWatchPanel.y = 4
|
||||||
|
@ -7528,15 +7533,35 @@ SUB DebugMode
|
||||||
IF cmd$ = "watchpoint" THEN
|
IF cmd$ = "watchpoint" THEN
|
||||||
temp$ = GetBytes$("", 0) 'reset buffer
|
temp$ = GetBytes$("", 0) 'reset buffer
|
||||||
tempIndex& = CVL(GetBytes$(value$, 4))
|
tempIndex& = CVL(GetBytes$(value$, 4))
|
||||||
|
tempArrayIndexes$ = GetBytes$(value$, 4)
|
||||||
|
tempArrayIndexes$ = tempArrayIndexes$ + GetBytes$(value$, CVL(tempArrayIndexes$))
|
||||||
|
tempElementOffset$ = GetBytes$(value$, 4)
|
||||||
i = CVI(GetBytes$(value$, 2))
|
i = CVI(GetBytes$(value$, 2))
|
||||||
temp$ = usedVariableList(tempIndex&).name + GetBytes$(value$, i)
|
temp$ = usedVariableList(tempIndex&).name + GetBytes$(value$, i)
|
||||||
result = idemessagebox("Watchpoint condition met", temp$, "#OK;#Clear Watchpoint")
|
result = idemessagebox("Watchpoint condition met", temp$, "#OK;#Clear Watchpoint")
|
||||||
IF result = 2 THEN
|
IF result = 2 THEN
|
||||||
|
'find existing watchpoint for the same variable/index/element
|
||||||
|
temp$ = MKL$(tempIndex&) + tempArrayIndexes$ + tempElementOffset$
|
||||||
|
i = 0
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
DO WHILE i
|
||||||
|
IF MID$(watchpointList$, i + 8, LEN(temp$)) = temp$ THEN EXIT DO
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF i > 0 THEN
|
||||||
|
'remove it
|
||||||
|
j = CVL(MID$(watchpointList$, i + 4, 4))
|
||||||
|
watchpointList$ = LEFT$(watchpointList$, i - 1) + MID$(watchpointList$, i + j + 8)
|
||||||
|
END IF
|
||||||
|
|
||||||
cmd$ = "clear last watchpoint"
|
cmd$ = "clear last watchpoint"
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
END IF
|
END IF
|
||||||
value$ = RIGHT$(value$, 4)
|
value$ = RIGHT$(value$, 4)
|
||||||
END IF
|
END IF
|
||||||
|
PCOPY 3, 0: SCREEN , , 3, 0
|
||||||
|
WHILE _MOUSEINPUT: WEND
|
||||||
l = CVL(value$)
|
l = CVL(value$)
|
||||||
idecy = l
|
idecy = l
|
||||||
ideselect = 0
|
ideselect = 0
|
||||||
|
@ -7917,6 +7942,20 @@ SUB showvWatchPanel (this AS vWatchPanelType, currentScope$, action as _BYTE)
|
||||||
END IF
|
END IF
|
||||||
IF LEN(item$) > this.contentWidth THEN this.contentWidth = LEN(item$)
|
IF LEN(item$) > this.contentWidth THEN this.contentWidth = LEN(item$)
|
||||||
IF WatchListToConsole = 0 THEN
|
IF WatchListToConsole = 0 THEN
|
||||||
|
'find existing watchpoint for this variable/index/element
|
||||||
|
temp2$ = MKL$(tempIndex&) + MKL$(tempTotalArrayIndexes& * 4) + tempArrayIndexes$ + MKL$(tempElementOffset&)
|
||||||
|
j = 0
|
||||||
|
j = INSTR(j + 1, watchpointList$, MKL$(-1))
|
||||||
|
DO WHILE j
|
||||||
|
IF MID$(watchpointList$, j + 8, LEN(temp2$)) = temp2$ THEN EXIT DO
|
||||||
|
j = INSTR(j + 1, watchpointList$, MKL$(-1))
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF j > 0 THEN
|
||||||
|
COLOR 4
|
||||||
|
_PRINTSTRING (this.x + 1, this.y + y), CHR$(7) 'watchpoint bullet indicator
|
||||||
|
COLOR fg
|
||||||
|
END IF
|
||||||
_PRINTSTRING (this.x + 2, this.y + y), MID$(item$, this.hPos, this.w - 4)
|
_PRINTSTRING (this.x + 2, this.y + y), MID$(item$, this.hPos, this.w - 4)
|
||||||
ELSE
|
ELSE
|
||||||
_ECHO item$
|
_ECHO item$
|
||||||
|
@ -7996,7 +8035,7 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
selectedBG = 2
|
selectedBG = 2
|
||||||
|
|
||||||
TYPE varDlgList
|
TYPE varDlgList
|
||||||
AS LONG index, bgColorFlag, colorFlag, colorFlag2, indicator
|
AS LONG index, bgColorFlag, colorFlag, colorFlag2, indicator, indicator2
|
||||||
AS _BYTE selected
|
AS _BYTE selected
|
||||||
AS STRING varType
|
AS STRING varType
|
||||||
END TYPE
|
END TYPE
|
||||||
|
@ -8375,8 +8414,24 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
LOOP
|
LOOP
|
||||||
END IF
|
END IF
|
||||||
a2$ = ""
|
a2$ = ""
|
||||||
IF storageSlot& > 0 THEN
|
IF storageSlot& > 0 AND focus = 5 THEN
|
||||||
a2$ = vWatchReceivedData$(storageSlot&)
|
a2$ = vWatchReceivedData$(storageSlot&)
|
||||||
|
ELSEIF focus = 6 THEN
|
||||||
|
'find existing watchpoint for this variable/index/element
|
||||||
|
temp$ = MKL$(tempIndex&) + tempArrayIndexes$ + tempElementOffset$
|
||||||
|
i = 0
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
DO WHILE i
|
||||||
|
IF MID$(watchpointList$, i + 8, LEN(temp$)) = temp$ THEN EXIT DO
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF i > 0 THEN
|
||||||
|
j = CVL(MID$(watchpointList$, i + 4, 4))
|
||||||
|
temp$ = MID$(watchpointList$, i + 8, j)
|
||||||
|
j = CVI(RIGHT$(temp$, 2))
|
||||||
|
a2$ = MID$(temp$, LEN(temp$) - (2 + j) + 1, j)
|
||||||
|
END IF
|
||||||
END IF
|
END IF
|
||||||
IF INSTR(varType$, "STRING") THEN
|
IF INSTR(varType$, "STRING") THEN
|
||||||
thisWidth = idewx - 20
|
thisWidth = idewx - 20
|
||||||
|
@ -8391,6 +8446,8 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
'validate condition string first
|
'validate condition string first
|
||||||
v$ = LTRIM$(v$)
|
v$ = LTRIM$(v$)
|
||||||
IF LEN(v$) < 2 THEN
|
IF LEN(v$) < 2 THEN
|
||||||
|
result = idemessagebox(dlgTitle$, "Watchpoint cleared.", "#OK")
|
||||||
|
_KEYCLEAR
|
||||||
v$ = ""
|
v$ = ""
|
||||||
thisReturnAction = 3 'remove watchpoint for this variable
|
thisReturnAction = 3 'remove watchpoint for this variable
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -8435,6 +8492,30 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
cmd$ = cmd$ + MKI$(LEN(varType$)) + varType$
|
cmd$ = cmd$ + MKI$(LEN(varType$)) + varType$
|
||||||
cmd$ = cmd$ + MKI$(LEN(v$)) + v$
|
cmd$ = cmd$ + MKI$(LEN(v$)) + v$
|
||||||
idevariablewatchbox$ = cmd$
|
idevariablewatchbox$ = cmd$
|
||||||
|
|
||||||
|
IF thisReturnAction = 2 OR thisReturnAction = 3 THEN
|
||||||
|
'find existing watchpoint for the same variable/index/element
|
||||||
|
temp$ = MKL$(tempIndex&) + tempArrayIndexes$ + tempElementOffset$
|
||||||
|
i = 0
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
DO WHILE i
|
||||||
|
IF MID$(watchpointList$, i + 8, LEN(temp$)) = temp$ THEN EXIT DO
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF i > 0 THEN
|
||||||
|
'remove it
|
||||||
|
j = CVL(MID$(watchpointList$, i + 4, 4))
|
||||||
|
watchpointList$ = LEFT$(watchpointList$, i - 1) + MID$(watchpointList$, i + j + 8)
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF thisReturnAction = 2 THEN
|
||||||
|
'add watchpoint
|
||||||
|
temp$ = temp$ + v$ + MKI$(LEN(v$))
|
||||||
|
watchpointList$ = watchpointList$ + MKL$(-1) + MKL$(LEN(temp$)) + temp$
|
||||||
|
END IF
|
||||||
|
|
||||||
returnAction = thisReturnAction 'actually send command
|
returnAction = thisReturnAction 'actually send command
|
||||||
ELSE
|
ELSE
|
||||||
returnAction = -1 'redraw and carry on
|
returnAction = -1 'redraw and carry on
|
||||||
|
@ -8872,7 +8953,7 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
maxVarLen = LEN("Variable")
|
maxVarLen = LEN("Variable")
|
||||||
FOR x = 1 TO totalVariablesCreated
|
FOR x = 1 TO totalVariablesCreated
|
||||||
IF usedVariableList(x).includedLine THEN _CONTINUE 'don't deal with variables in $INCLUDEs
|
IF usedVariableList(x).includedLine THEN _CONTINUE 'don't deal with variables in $INCLUDEs
|
||||||
thisLen = LEN(usedVariableList(x).name)
|
thisLen = LEN(usedVariableList(x).name) + 3 'extra room for the eventual bullet
|
||||||
IF LEN(usedVariableList(x).watchRange) > 0 THEN
|
IF LEN(usedVariableList(x).watchRange) > 0 THEN
|
||||||
thisLen = thisLen + LEN(usedVariableList(x).watchRange)
|
thisLen = thisLen + LEN(usedVariableList(x).watchRange)
|
||||||
END IF
|
END IF
|
||||||
|
@ -8925,6 +9006,22 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
IF LEN(usedVariableList(x).watchRange) THEN
|
IF LEN(usedVariableList(x).watchRange) THEN
|
||||||
thisName$ = LEFT$(thisName$, LEN(thisName$) - 1) + usedVariableList(x).watchRange + ")"
|
thisName$ = LEFT$(thisName$, LEN(thisName$) - 1) + usedVariableList(x).watchRange + ")"
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
'find existing watchpoint for this variable/index/element
|
||||||
|
temp$ = MKL$(x)
|
||||||
|
i = 0
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
DO WHILE i
|
||||||
|
IF MID$(watchpointList$, i + 8, LEN(temp$)) = temp$ THEN EXIT DO
|
||||||
|
i = INSTR(i + 1, watchpointList$, MKL$(-1))
|
||||||
|
LOOP
|
||||||
|
|
||||||
|
IF i > 0 THEN
|
||||||
|
thisName$ = thisName$ + CHR$(16) + CHR$(4) + CHR$(7) 'red bullet to indicate watchpoint
|
||||||
|
ELSE
|
||||||
|
thisName$ = thisName$ + CHR$(16) + CHR$(16) + " "
|
||||||
|
END IF
|
||||||
|
|
||||||
text$ = thisName$ + CHR$(16)
|
text$ = thisName$ + CHR$(16)
|
||||||
varDlgList(totalVisibleVariables).colorFlag2 = LEN(l$) + LEN(text$) + 1
|
varDlgList(totalVisibleVariables).colorFlag2 = LEN(l$) + LEN(text$) + 1
|
||||||
IF usedVariableList(x).watch THEN
|
IF usedVariableList(x).watch THEN
|
||||||
|
@ -14859,7 +14956,14 @@ FUNCTION idemessagebox (titlestr$, messagestr$, buttons$)
|
||||||
'specific post controls
|
'specific post controls
|
||||||
IF K$ = CHR$(27) THEN EXIT FUNCTION
|
IF K$ = CHR$(27) THEN EXIT FUNCTION
|
||||||
|
|
||||||
IF K$ = CHR$(13) OR (info <> 0) THEN idemessagebox = focus: EXIT FUNCTION
|
IF K$ = CHR$(13) OR (info <> 0) THEN
|
||||||
|
idemessagebox = focus
|
||||||
|
DO UNTIL mCLICK = 0
|
||||||
|
GetInput
|
||||||
|
_LIMIT 100
|
||||||
|
LOOP
|
||||||
|
EXIT FUNCTION
|
||||||
|
END IF
|
||||||
'end of custom controls
|
'end of custom controls
|
||||||
|
|
||||||
mousedown = 0
|
mousedown = 0
|
||||||
|
|
Loading…
Reference in a new issue