From a2a49cef018d8cdf2d5a30c3af95951dcfd55b75 Mon Sep 17 00:00:00 2001 From: FellippeHeitor Date: Tue, 27 Jul 2021 00:28:03 -0300 Subject: [PATCH] Allows local variables to be watched (still a bit broken). --- internal/support/vwatch/vwatch.bi | 3 ++- internal/support/vwatch/vwatch.bm | 8 ++++++-- source/ide/ide_methods.bas | 8 ++++++++ source/qb64.bas | 4 +++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/support/vwatch/vwatch.bi b/internal/support/vwatch/vwatch.bi index 5bb830bfa..09d6ac240 100644 --- a/internal/support/vwatch/vwatch.bi +++ b/internal/support/vwatch/vwatch.bi @@ -1,6 +1,6 @@ $CHECKING:OFF DIM SHARED AS LONG vwatch_linenumber, vwatch_sublevel, vwatch_goto -DIM SHARED AS STRING vwatch_subname, vwatch_callstack +DIM SHARED AS STRING vwatch_subname, vwatch_internalsubname, vwatch_callstack REDIM SHARED vwatch_breakpoints(0) AS _BYTE REDIM SHARED vwatch_skiplines(0) AS _BYTE 'next lines are just to avoid "unused variable" warnings: @@ -10,5 +10,6 @@ vwatch_goto = 0 vwatch_breakpoints(0) = 0 vwatch_skiplines(0) = 0 vwatch_subname = "" +vwatch_internalsubname = "" vwatch_callstack = "" $CHECKING:ON diff --git a/internal/support/vwatch/vwatch.bm b/internal/support/vwatch/vwatch.bm index d671f26e6..71d212e84 100644 --- a/internal/support/vwatch/vwatch.bm +++ b/internal/support/vwatch/vwatch.bm @@ -166,7 +166,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET) cmd$ = cmd$ + MKL$(vwatch_linenumber) GOSUB SendCommand IF vwatch_sublevel > 1 THEN - cmd$ = "current sub:" + vwatch_subname$ + cmd$ = "current sub:" + vwatch_internalsubname$ ELSE cmd$ = "current sub:" END IF @@ -226,6 +226,8 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET) address = globalVariables + LEN(address) * localIndex address = _MEMGET(m, address, _OFFSET) GOSUB GetMemData + $CONSOLE + _ECHO "Sending global var: " + STR$(tempIndex) + " = " + result$ cmd$ = "global var:" + MKL$(tempIndex) + result$ GOSUB SendCommand CASE "local var" @@ -234,10 +236,12 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET) dataType$ = MID$(value$, 9) address = localVariables + LEN(address) * localIndex address = _MEMGET(m, address, _OFFSET) + GOSUB GetMemData + _ECHO "Sending local var: " + STR$(tempIndex) + " = " + result$ cmd$ = "local var:" + MKL$(tempIndex) + result$ GOSUB SendCommand CASE "current sub" - cmd$ = "current sub:" + vwatch_subname$ + cmd$ = "current sub:" + vwatch_internalsubname$ GOSUB SendCommand CASE "set next line" pauseMode = -1 diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index 324c11e5c..737516e02 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -6940,12 +6940,17 @@ 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 cmd$ = "local var:" END IF IF LEN(cmd$) THEN + _CONSOLE ON + _ECHO "Requesting " + cmd$ + _ECHO "currentSub$ = " + currentSub$ cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex) + usedVariableList(tempIndex&).varType GOSUB SendCommand END IF @@ -6953,8 +6958,11 @@ SUB DebugMode LOOP END IF CASE "global var", "local var" + _ECHO "Received " + cmd$ tempIndex& = CVL(LEFT$(value$, 4)) value$ = MID$(value$, 5) + _ECHO "index = " + STR$(tempIndex&) + _ECHO "=== value$ = " + value$ usedVariableList(tempIndex&).mostRecentValue = value$ CASE "current sub" currentSub$ = value$ diff --git a/source/qb64.bas b/source/qb64.bas index 9fc856755..bfdbd163a 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -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@" + "@__ARRAY_BYTE_VWATCH_SKIPLINES@__STRING_VWATCH_INTERNALSUBNAME@" DIM SHARED qb64prefix_set_recompileAttempts, qb64prefix_set_desiredState DIM SHARED opex_recompileAttempts, opex_desiredState @@ -5158,6 +5158,8 @@ DO PRINT #12, "qbs_set(__STRING_VWATCH_SUBNAME,qbs_new_txt_len(" + CHR$(34) + inclinenump$ + subfuncoriginalname$ + CHR$(34) + "," + str2$(LEN(inclinenump$ + subfuncoriginalname$)) + "));" PRINT #12, "qbs_cleanup(qbs_tmp_base,0);" + PRINT #12, "qbs_set(__STRING_VWATCH_INTERNALSUBNAME,qbs_new_txt_len(" + CHR$(34) + subfunc + CHR$(34) + "," + str2$(LEN(subfunc)) + "));" + PRINT #12, "qbs_cleanup(qbs_tmp_base,0);" PRINT #12, "*__LONG_VWATCH_LINENUMBER=-2; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);" END IF END IF