diff --git a/source/ide/ide_global.bas b/source/ide/ide_global.bas index 1f9c97d5c..074848ca0 100644 --- a/source/ide/ide_global.bas +++ b/source/ide/ide_global.bas @@ -11,7 +11,7 @@ DIM SHARED IDEBuildModeChanged DIM SHARED IdeInfo AS STRING DIM SHARED IdeContextHelpSF AS _BYTE -DIM SHARED host& +DIM SHARED host&, hostport$ DIM SHARED IdeSystem AS LONG '1=Entering text into the main IDE window diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index 4720cb365..bf4a95884 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -683,7 +683,9 @@ FUNCTION ide2 (ignore) STATIC attemptToHost AS _BYTE IF vWatchOn = 1 AND attemptToHost = 0 THEN IF host& = 0 THEN - host& = _OPENHOST("TCP/IP:9000") + hostport$ = _TRIM$(STR$(9000 + tempfolderindex)) + ENVIRON "QB64DEBUGPORT=" + hostport$ + host& = _OPENHOST("TCP/IP:" + hostport$) attemptToHost = -1 END IF END IF @@ -4146,7 +4148,7 @@ FUNCTION ide2 (ignore) IF altheld <> 0 AND lastaltheld = 0 THEN DO - _LIMIT 1000 + _LIMIT 100 GetInput IF _WINDOWHASFOCUS = 0 AND (os$ = "WIN" OR MacOSX = 1) THEN COLOR 0, 7: _PRINTSTRING (1, 1), menubar$ @@ -4370,7 +4372,7 @@ FUNCTION ide2 (ignore) 'revert to previous menuwhen alt pressed again IF altheld <> 0 AND lastaltheld = 0 THEN DO - _LIMIT 1000 + _LIMIT 100 GetInput IF _WINDOWHASFOCUS = 0 AND (os$ = "WIN" OR MacOSX = 1) THEN COLOR 0, 7: _PRINTSTRING (1, 1), menubar$ @@ -6029,7 +6031,7 @@ SUB DebugMode SCREEN , , 3, 0 COLOR 0, 7: _PRINTSTRING (1, 1), SPACE$(LEN(menubar$)) m$ = "$DEBUG MODE ACTIVE" - COLOR 2 + COLOR 0 _PRINTSTRING ((idewx - LEN(m$)) \ 2, 1), m$ dummy = DarkenFGBG(1) @@ -6037,7 +6039,7 @@ SUB DebugMode setStatusMessage 1, "Entering $DEBUG mode (ESC to abort)...", 15 IF host& = 0 THEN - host& = _OPENHOST("TCP/IP:9000") + host& = _OPENHOST("TCP/IP:" + hostport$) IF host& = 0 THEN dummy = DarkenFGBG(0) clearStatusWindow 1 @@ -6096,13 +6098,8 @@ SUB DebugMode CASE "me" program$ = value$ expected$ = lastBinaryGenerated$ - IF LEFT$(program$, 2) = "./" THEN program$ = MID$(program$, 3) - - IF INSTR(_OS$, "WIN") THEN - IF INSTR(expected$, "/") = 0 AND INSTR(expected$, "\") = 0 THEN - expected$ = getfilepath$(COMMAND$(0)) + expected$ - END IF - END IF + p$ = ideztakepath$(program$) + p$ = ideztakepath$(expected$) IF program$ <> expected$ THEN dummy = DarkenFGBG(0) @@ -6315,11 +6312,6 @@ SUB DebugMode COLOR , 4 setStatusMessage 1, "Error occurred on line" + STR$(l), 13 PauseMode = -1 - CASE "call" - callstack = callstack + 1 - onLine$ = STR$(CVL(RIGHT$(value$, 4))) - procedure$ = LEFT$(value$, LEN(value$) - 4) - 'store this in an array and allow it to be inspected END SELECT _LIMIT 100 @@ -6340,6 +6332,8 @@ SUB DebugMode IF INSTR(cmd$, ":") THEN value$ = MID$(cmd$, INSTR(cmd$, ":") + 1) cmd$ = LEFT$(cmd$, INSTR(cmd$, ":") - 1) + ELSE + value$ = "" END IF ELSE cmd$ = "": value$ = "" @@ -6349,6 +6343,7 @@ SUB DebugMode SendCommand: cmd$ = cmd$ + endc$ PUT #client&, , cmd$ + cmd$ = "" RETURN END SUB diff --git a/source/qb64.bas b/source/qb64.bas index a4c6865f3..053ccbb02 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -5134,7 +5134,14 @@ DO IF vWatchOn = 1 THEN PRINT #12, "*__LONG_VWATCH_SUBLEVEL=*__LONG_VWATCH_SUBLEVEL+ 1 ;" IF subfunc <> "SUB_VWATCH" THEN - PRINT #12, "qbs_set(__STRING_VWATCH_SUBNAME,qbs_new_txt_len(" + CHR$(34) + subfuncoriginalname$ + CHR$(34) + "," + str2$(LEN(subfuncoriginalname$)) + "));" + inclinenump$ = "" + IF inclinenumber(inclevel) THEN + thisincname$ = getfilepath$(incname$(inclevel)) + thisincname$ = MID$(incname$(inclevel), LEN(thisincname$) + 1) + inclinenump$ = "(" + thisincname$ + "," + STR$(inclinenumber(inclevel)) + ") " + END IF + + 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, "*__LONG_VWATCH_LINENUMBER=-2; SUB_VWATCH((ptrszint*)vwatch_local_vars);" END IF diff --git a/source/utilities/vwatch/vwatch.bi b/source/utilities/vwatch/vwatch.bi index 5f34af30d..d00207667 100644 --- a/source/utilities/vwatch/vwatch.bi +++ b/source/utilities/vwatch/vwatch.bi @@ -1,10 +1,11 @@ $CHECKING:OFF DIM SHARED AS LONG vwatch_linenumber, vwatch_sublevel -DIM SHARED AS STRING vwatch_subname +DIM SHARED AS STRING vwatch_subname, vwatch_callstack REDIM SHARED vwatch_breakpoints(0) AS _BYTE 'next lines are just to avoid "unused variable" warnings: vwatch_linenumber = 0 vwatch_sublevel = 0 vwatch_breakpoints(0) = 0 vwatch_subname = "" +vwatch_callstack = "" $CHECKING:ON diff --git a/source/utilities/vwatch/vwatch.bm b/source/utilities/vwatch/vwatch.bm index 5c96de6c5..94a2621b8 100644 --- a/source/utilities/vwatch/vwatch.bm +++ b/source/utilities/vwatch/vwatch.bm @@ -2,6 +2,7 @@ $CHECKING:OFF SUB vwatch (localVariables AS _OFFSET) STATIC AS LONG ide, breakpointCount, timeout, startLevel, lastLine + STATIC AS LONG callStackLength STATIC AS _BYTE pauseMode, stepOver, bypass STATIC buffer$, endc$ DIM AS LONG i @@ -77,8 +78,8 @@ SUB vwatch (localVariables AS _OFFSET) EXIT SUB ELSEIF vwatch_linenumber = -2 THEN 'report a new sub/function has been "entered" - cmd$ = "call:" + vwatch_subname + MKL$(lastLine) - GOSUB SendCommand + IF LEN(vwatch_callstack) THEN vwatch_callstack = vwatch_callstack + CHR$(0) + vwatch_callstack = vwatch_callstack + vwatch_subname$ + ", line" + STR$(lastLine) EXIT SUB END IF @@ -152,6 +153,8 @@ SUB vwatch (localVariables AS _OFFSET) vwatch_breakpoints(CVL(value$)) = 0 CASE "clear all breakpoints" REDIM vwatch_breakpoints(UBOUND(vwatch_breakpoints)) AS _BYTE + CASE "call stack" + 'send call stack history" CASE "local" i = CVL(value$) address = localVariables + LEN(address) * i @@ -165,10 +168,13 @@ SUB vwatch (localVariables AS _OFFSET) vwatch_starttimers EXIT SUB Connect: + ideport$ = ENVIRON$("QB64DEBUGPORT") + IF ideport$ = "" THEN bypass = -1: EXIT SUB + start! = TIMER DO k& = _KEYHIT - ide = _OPENCLIENT("TCP/IP:9000:localhost") + ide = _OPENCLIENT("TCP/IP:" + ideport$ + ":localhost") _LIMIT 30 LOOP UNTIL k& = 27 OR ide <> 0 OR TIMER - start! > timeout IF ide = 0 THEN bypass = -1: EXIT SUB @@ -185,6 +191,8 @@ SUB vwatch (localVariables AS _OFFSET) IF INSTR(cmd$, ":") THEN value$ = MID$(cmd$, INSTR(cmd$, ":") + 1) cmd$ = LEFT$(cmd$, INSTR(cmd$, ":") - 1) + ELSE + value$ = "" END IF ELSE cmd$ = "": value$ = "" @@ -194,5 +202,6 @@ SUB vwatch (localVariables AS _OFFSET) SendCommand: cmd$ = cmd$ + endc$ PUT #ide, , cmd$ + cmd$ = "" RETURN END SUB