1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-29 10:30:36 +00:00

Ignores local variable requests when out of scope.

This commit is contained in:
FellippeHeitor 2021-07-27 12:18:50 -03:00
parent 96ce163800
commit 5e2f40c4f1
4 changed files with 22 additions and 30 deletions

View file

@ -3,12 +3,14 @@ DIM SHARED AS LONG vwatch_linenumber, vwatch_sublevel, vwatch_goto
DIM SHARED AS STRING vwatch_subname, vwatch_internalsubname, vwatch_callstack
REDIM SHARED vwatch_breakpoints(0) AS _BYTE
REDIM SHARED vwatch_skiplines(0) AS _BYTE
REDIM SHARED vwatch_stack(1000) AS STRING
'next lines are just to avoid "unused variable" warnings:
vwatch_linenumber = 0
vwatch_sublevel = 0
vwatch_goto = 0
vwatch_breakpoints(0) = 0
vwatch_skiplines(0) = 0
vwatch_stack(0) = ""
vwatch_subname = ""
vwatch_internalsubname = ""
vwatch_callstack = ""

View file

@ -8,7 +8,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
DIM AS LONG i, tempIndex, localIndex, varSize, sequence
DIM AS _OFFSET address
DIM AS _MEM m, m2
DIM start!, temp$, cmd$, value$, k&, dataType$, result$, buf$
DIM start!, temp$, cmd$, value$, k&, buf$, scope$
DECLARE LIBRARY
SUB vwatch_stoptimers ALIAS stop_timers
@ -105,6 +105,10 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
callStackLength = callStackLength + 1
IF LEN(vwatch_callstack) THEN vwatch_callstack = vwatch_callstack + CHR$(0)
vwatch_callstack = vwatch_callstack + vwatch_subname$ + ", line" + STR$(lastLine)
IF vwatch_sublevel > UBOUND(vwatch_stack) THEN
REDIM _PRESERVE vwatch_stack(UBOUND(vwatch_stack) + 1000) AS STRING
END IF
vwatch_stack(vwatch_sublevel) = vwatch_internalsubname$
EXIT SUB
ELSEIF vwatch_linenumber = -3 THEN
'handle STOP - instead of quitting, pause execution
@ -165,11 +169,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
IF vwatch_breakpoints(vwatch_linenumber) THEN cmd$ = "breakpoint:"
cmd$ = cmd$ + MKL$(vwatch_linenumber)
GOSUB SendCommand
IF vwatch_sublevel > 1 THEN
cmd$ = "current sub:" + vwatch_internalsubname$
ELSE
cmd$ = "current sub:"
END IF
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel)
GOSUB SendCommand
DO 'main loop
@ -223,23 +223,21 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
tempIndex = CVL(LEFT$(value$, 4))
localIndex = CVL(MID$(value$, 5, 4))
address = _OFFSET(globalVariables) + LEN(address) * localIndex
$CONSOLE
_ECHO "arrelem address=" + HEX$(address)
address = _MEMGET(m, address, _OFFSET)
address = _MEMGET(m, address, _OFFSET)
_ECHO "var address=" + HEX$(address)
address = _MEMGET(m, address, _OFFSET) 'first resolve pass
address = _MEMGET(m, address, _OFFSET) 'second resolve pass
cmd$ = "global var:" + MKL$(tempIndex) + STR$(address)
GOSUB SendCommand
CASE "local var"
tempIndex = CVL(LEFT$(value$, 4))
localIndex = CVL(MID$(value$, 5, 4))
address = _OFFSET(localVariables) + LEN(address) * localIndex
_ECHO "arrelem address=" + HEX$(address)
address = _MEMGET(m, address, _OFFSET)
address = _MEMGET(m, address, _OFFSET)
_ECHO "var address=" + HEX$(address)
cmd$ = "local var:" + MKL$(tempIndex) + STR$(address)
GOSUB SendCommand
scope$ = MID$(value$, 9)
IF scope$ = vwatch_stack(vwatch_sublevel) THEN
address = _OFFSET(localVariables) + LEN(address) * localIndex
address = _MEMGET(m, address, _OFFSET) 'first resolve pass
address = _MEMGET(m, address, _OFFSET) 'second resolve pass
cmd$ = "local var:" + MKL$(tempIndex) + STR$(address)
GOSUB SendCommand
END IF
CASE "get address"
tempIndex = CVL(LEFT$(value$, 4))
sequence = CVI(MID$(value$, 5, 2))
@ -252,7 +250,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
cmd$ = "address read:" + MKL$(tempIndex) + MKI$(sequence) + buf$
GOSUB SendCommand
CASE "current sub"
cmd$ = "current sub:" + vwatch_internalsubname$
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel)
GOSUB SendCommand
CASE "set next line"
pauseMode = -1

View file

@ -6940,18 +6940,13 @@ SUB DebugMode
temp$ = MID$(temp$, 5)
IF usedVariableList(tempIndex&).watch THEN
cmd$ = ""
'_ECHO "usedVariableList(tempIndex&).subfunc =" + usedVariableList(tempIndex&).subfunc
'_ECHO "currentSub$ =" + currentSub$
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
cmd$ = "global var:"
ELSEIF usedVariableList(tempIndex&).subfunc = currentSub$ THEN
ELSE
cmd$ = "local var:"
END IF
IF LEN(cmd$) THEN
_CONSOLE ON
_ECHO "Requesting " + cmd$ + STR$(tempIndex&)
'_ECHO "currentSub$ = " + currentSub$
cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex)
cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex) + usedVariableList(tempIndex&).subfunc
GOSUB SendCommand
END IF
END IF
@ -6973,13 +6968,11 @@ SUB DebugMode
CASE "_OFFSET", "_UNSIGNED _OFFSET": varSize& = LEN(dummy%&)
CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&)
END SELECT
_ECHO "Requesting " + STR$(varSize&) + " bytes from &H" + HEX$(address%&)
cmd$ = "get address:" + MKL$(tempIndex&) + MKI$(1) + MKL$(varSize&) + STR$(address%&)
GOSUB SendCommand
CASE "address read"
tempIndex& = CVL(LEFT$(value$, 4))
sequence% = CVI(MID$(value$, 5, 2))
_ECHO "Received data for " + STR$(tempIndex&)
recvData$ = MID$(value$, 7)
varType$ = usedVariableList(tempIndex&).varType
IF INSTR(varType$, "STRING *") THEN varType$ = "STRING"
@ -7007,7 +7000,6 @@ SUB DebugMode
strLength& = CVL(MID$(recvData$, 5))
END IF
address$ = LEFT$(recvData$, LEN(dummy%&)) 'Pointer to data
_ECHO "Requesting string of length " + STR$(strLength&) + " at &H" + HEX$(address%&)
cmd$ = "get address:" + MKL$(tempIndex&) + MKI$(2) + MKL$(strLength&) + STR$(address%&)
GOSUB SendCommand
GOTO vwatch_string_seq1_done

View file

@ -31,7 +31,7 @@ DIM SHARED vWatchNewVariable$, vWatchVariableExclusions$
vWatchErrorCall$ = "if (stop_program) {*__LONG_VWATCH_LINENUMBER=0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);};if(new_error){bkp_new_error=new_error;new_error=0;*__LONG_VWATCH_LINENUMBER=-1; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);new_error=bkp_new_error;};"
vWatchVariableExclusions$ = "@__LONG_VWATCH_LINENUMBER@__LONG_VWATCH_SUBLEVEL@__LONG_VWATCH_GOTO@" + _
"@__STRING_VWATCH_SUBNAME@__STRING_VWATCH_CALLSTACK@__ARRAY_BYTE_VWATCH_BREAKPOINTS" + _
"@__ARRAY_BYTE_VWATCH_SKIPLINES@__STRING_VWATCH_INTERNALSUBNAME@"
"@__ARRAY_BYTE_VWATCH_SKIPLINES@__STRING_VWATCH_INTERNALSUBNAME@__ARRAY_STRING_VWATCH_STACK@"
DIM SHARED qb64prefix_set_recompileAttempts, qb64prefix_set_desiredState
DIM SHARED opex_recompileAttempts, opex_desiredState