mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-07-01 12:40:36 +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
|
DIM SHARED AS STRING vwatch_subname, vwatch_internalsubname, vwatch_callstack
|
||||||
REDIM SHARED vwatch_breakpoints(0) AS _BYTE
|
REDIM SHARED vwatch_breakpoints(0) AS _BYTE
|
||||||
REDIM SHARED vwatch_skiplines(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:
|
'next lines are just to avoid "unused variable" warnings:
|
||||||
vwatch_linenumber = 0
|
vwatch_linenumber = 0
|
||||||
vwatch_sublevel = 0
|
vwatch_sublevel = 0
|
||||||
vwatch_goto = 0
|
vwatch_goto = 0
|
||||||
vwatch_breakpoints(0) = 0
|
vwatch_breakpoints(0) = 0
|
||||||
vwatch_skiplines(0) = 0
|
vwatch_skiplines(0) = 0
|
||||||
|
vwatch_stack(0) = ""
|
||||||
vwatch_subname = ""
|
vwatch_subname = ""
|
||||||
vwatch_internalsubname = ""
|
vwatch_internalsubname = ""
|
||||||
vwatch_callstack = ""
|
vwatch_callstack = ""
|
||||||
|
|
|
@ -8,7 +8,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
DIM AS LONG i, tempIndex, localIndex, varSize, sequence
|
DIM AS LONG i, tempIndex, localIndex, varSize, sequence
|
||||||
DIM AS _OFFSET address
|
DIM AS _OFFSET address
|
||||||
DIM AS _MEM m, m2
|
DIM AS _MEM m, m2
|
||||||
DIM start!, temp$, cmd$, value$, k&, dataType$, result$, buf$
|
DIM start!, temp$, cmd$, value$, k&, buf$, scope$
|
||||||
|
|
||||||
DECLARE LIBRARY
|
DECLARE LIBRARY
|
||||||
SUB vwatch_stoptimers ALIAS stop_timers
|
SUB vwatch_stoptimers ALIAS stop_timers
|
||||||
|
@ -105,6 +105,10 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
callStackLength = callStackLength + 1
|
callStackLength = callStackLength + 1
|
||||||
IF LEN(vwatch_callstack) THEN vwatch_callstack = vwatch_callstack + CHR$(0)
|
IF LEN(vwatch_callstack) THEN vwatch_callstack = vwatch_callstack + CHR$(0)
|
||||||
vwatch_callstack = vwatch_callstack + vwatch_subname$ + ", line" + STR$(lastLine)
|
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
|
EXIT SUB
|
||||||
ELSEIF vwatch_linenumber = -3 THEN
|
ELSEIF vwatch_linenumber = -3 THEN
|
||||||
'handle STOP - instead of quitting, pause execution
|
'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:"
|
IF vwatch_breakpoints(vwatch_linenumber) THEN cmd$ = "breakpoint:"
|
||||||
cmd$ = cmd$ + MKL$(vwatch_linenumber)
|
cmd$ = cmd$ + MKL$(vwatch_linenumber)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
IF vwatch_sublevel > 1 THEN
|
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel)
|
||||||
cmd$ = "current sub:" + vwatch_internalsubname$
|
|
||||||
ELSE
|
|
||||||
cmd$ = "current sub:"
|
|
||||||
END IF
|
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
|
|
||||||
DO 'main loop
|
DO 'main loop
|
||||||
|
@ -223,23 +223,21 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
tempIndex = CVL(LEFT$(value$, 4))
|
tempIndex = CVL(LEFT$(value$, 4))
|
||||||
localIndex = CVL(MID$(value$, 5, 4))
|
localIndex = CVL(MID$(value$, 5, 4))
|
||||||
address = _OFFSET(globalVariables) + LEN(address) * localIndex
|
address = _OFFSET(globalVariables) + LEN(address) * localIndex
|
||||||
$CONSOLE
|
address = _MEMGET(m, address, _OFFSET) 'first resolve pass
|
||||||
_ECHO "arrelem address=" + HEX$(address)
|
address = _MEMGET(m, address, _OFFSET) 'second resolve pass
|
||||||
address = _MEMGET(m, address, _OFFSET)
|
|
||||||
address = _MEMGET(m, address, _OFFSET)
|
|
||||||
_ECHO "var address=" + HEX$(address)
|
|
||||||
cmd$ = "global var:" + MKL$(tempIndex) + STR$(address)
|
cmd$ = "global var:" + MKL$(tempIndex) + STR$(address)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
CASE "local var"
|
CASE "local var"
|
||||||
tempIndex = CVL(LEFT$(value$, 4))
|
tempIndex = CVL(LEFT$(value$, 4))
|
||||||
localIndex = CVL(MID$(value$, 5, 4))
|
localIndex = CVL(MID$(value$, 5, 4))
|
||||||
address = _OFFSET(localVariables) + LEN(address) * localIndex
|
scope$ = MID$(value$, 9)
|
||||||
_ECHO "arrelem address=" + HEX$(address)
|
IF scope$ = vwatch_stack(vwatch_sublevel) THEN
|
||||||
address = _MEMGET(m, address, _OFFSET)
|
address = _OFFSET(localVariables) + LEN(address) * localIndex
|
||||||
address = _MEMGET(m, address, _OFFSET)
|
address = _MEMGET(m, address, _OFFSET) 'first resolve pass
|
||||||
_ECHO "var address=" + HEX$(address)
|
address = _MEMGET(m, address, _OFFSET) 'second resolve pass
|
||||||
cmd$ = "local var:" + MKL$(tempIndex) + STR$(address)
|
cmd$ = "local var:" + MKL$(tempIndex) + STR$(address)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
|
END IF
|
||||||
CASE "get address"
|
CASE "get address"
|
||||||
tempIndex = CVL(LEFT$(value$, 4))
|
tempIndex = CVL(LEFT$(value$, 4))
|
||||||
sequence = CVI(MID$(value$, 5, 2))
|
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$
|
cmd$ = "address read:" + MKL$(tempIndex) + MKI$(sequence) + buf$
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
CASE "current sub"
|
CASE "current sub"
|
||||||
cmd$ = "current sub:" + vwatch_internalsubname$
|
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
CASE "set next line"
|
CASE "set next line"
|
||||||
pauseMode = -1
|
pauseMode = -1
|
||||||
|
|
|
@ -6940,18 +6940,13 @@ SUB DebugMode
|
||||||
temp$ = MID$(temp$, 5)
|
temp$ = MID$(temp$, 5)
|
||||||
IF usedVariableList(tempIndex&).watch THEN
|
IF usedVariableList(tempIndex&).watch THEN
|
||||||
cmd$ = ""
|
cmd$ = ""
|
||||||
'_ECHO "usedVariableList(tempIndex&).subfunc =" + usedVariableList(tempIndex&).subfunc
|
|
||||||
'_ECHO "currentSub$ =" + currentSub$
|
|
||||||
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
|
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
|
||||||
cmd$ = "global var:"
|
cmd$ = "global var:"
|
||||||
ELSEIF usedVariableList(tempIndex&).subfunc = currentSub$ THEN
|
ELSE
|
||||||
cmd$ = "local var:"
|
cmd$ = "local var:"
|
||||||
END IF
|
END IF
|
||||||
IF LEN(cmd$) THEN
|
IF LEN(cmd$) THEN
|
||||||
_CONSOLE ON
|
cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex) + usedVariableList(tempIndex&).subfunc
|
||||||
_ECHO "Requesting " + cmd$ + STR$(tempIndex&)
|
|
||||||
'_ECHO "currentSub$ = " + currentSub$
|
|
||||||
cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex)
|
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
@ -6973,13 +6968,11 @@ SUB DebugMode
|
||||||
CASE "_OFFSET", "_UNSIGNED _OFFSET": varSize& = LEN(dummy%&)
|
CASE "_OFFSET", "_UNSIGNED _OFFSET": varSize& = LEN(dummy%&)
|
||||||
CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&)
|
CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&)
|
||||||
END SELECT
|
END SELECT
|
||||||
_ECHO "Requesting " + STR$(varSize&) + " bytes from &H" + HEX$(address%&)
|
|
||||||
cmd$ = "get address:" + MKL$(tempIndex&) + MKI$(1) + MKL$(varSize&) + STR$(address%&)
|
cmd$ = "get address:" + MKL$(tempIndex&) + MKI$(1) + MKL$(varSize&) + STR$(address%&)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
CASE "address read"
|
CASE "address read"
|
||||||
tempIndex& = CVL(LEFT$(value$, 4))
|
tempIndex& = CVL(LEFT$(value$, 4))
|
||||||
sequence% = CVI(MID$(value$, 5, 2))
|
sequence% = CVI(MID$(value$, 5, 2))
|
||||||
_ECHO "Received data for " + STR$(tempIndex&)
|
|
||||||
recvData$ = MID$(value$, 7)
|
recvData$ = MID$(value$, 7)
|
||||||
varType$ = usedVariableList(tempIndex&).varType
|
varType$ = usedVariableList(tempIndex&).varType
|
||||||
IF INSTR(varType$, "STRING *") THEN varType$ = "STRING"
|
IF INSTR(varType$, "STRING *") THEN varType$ = "STRING"
|
||||||
|
@ -7007,7 +7000,6 @@ SUB DebugMode
|
||||||
strLength& = CVL(MID$(recvData$, 5))
|
strLength& = CVL(MID$(recvData$, 5))
|
||||||
END IF
|
END IF
|
||||||
address$ = LEFT$(recvData$, LEN(dummy%&)) 'Pointer to data
|
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%&)
|
cmd$ = "get address:" + MKL$(tempIndex&) + MKI$(2) + MKL$(strLength&) + STR$(address%&)
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
GOTO vwatch_string_seq1_done
|
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;};"
|
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@" + _
|
vWatchVariableExclusions$ = "@__LONG_VWATCH_LINENUMBER@__LONG_VWATCH_SUBLEVEL@__LONG_VWATCH_GOTO@" + _
|
||||||
"@__STRING_VWATCH_SUBNAME@__STRING_VWATCH_CALLSTACK@__ARRAY_BYTE_VWATCH_BREAKPOINTS" + _
|
"@__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 qb64prefix_set_recompileAttempts, qb64prefix_set_desiredState
|
||||||
DIM SHARED opex_recompileAttempts, opex_desiredState
|
DIM SHARED opex_recompileAttempts, opex_desiredState
|
||||||
|
|
Loading…
Reference in a new issue