mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-04 23:30:24 +00:00
Ignores local variable requests when out of scope.
This commit is contained in:
parent
96ce163800
commit
5e2f40c4f1
|
@ -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 = ""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue