diff --git a/jerry-debugger/jerry-client-ws.html b/jerry-debugger/jerry-client-ws.html index b2fb45c05..37f7106d5 100644 --- a/jerry-debugger/jerry-client-ws.html +++ b/jerry-debugger/jerry-client-ws.html @@ -118,6 +118,7 @@ function DebuggerClient(address) var backtraceFrame = 0; var evalResult = null; var exceptionData = null; + var display = 0; function assert(expr) { @@ -691,7 +692,7 @@ function DebuggerClient(address) return; } - func.source = source; + func.source = source.split(/\r\n|[\r\n]/); func.sourceName = sourceName; break; } @@ -854,6 +855,11 @@ function DebuggerClient(address) + (breakpoint.at ? "at " : "around ") + breakpointInfo + breakpointToString(breakpoint)); + + if (debuggerObj.display) + { + debuggerObj.printSource(debuggerObj.display); + } return; } @@ -1163,11 +1169,57 @@ function DebuggerClient(address) } } - this.printSource = function() + this.printSource = function(line_num) { - if (lastBreakpointHit) + if (!lastBreakpointHit) + return; + + lines = lastBreakpointHit.func.source; + if (line_num === 0) { - appendLog(lastBreakpointHit.func.source); + var start = 0; + var end = lastBreakpointHit.func.source.length - 1; + } + else + { + var start = Math.max(lastBreakpointHit.line - line_num, 0) + var end = Math.min(lastBreakpointHit.line + line_num - 1, + lastBreakpointHit.func.source.length - 1) + } + + if (lastBreakpointHit.func.sourceName) + appendLog("Source: " + lastBreakpointHit.func.sourceName); + + for (i = start; i < end; i++) + { + var str = (i + 1).toString(); + while (str.length < 4) + { + str = " " + str; + } + + if (i == lastBreakpointHit.line - 1) + { + appendLog(str + " > " + lines[i]); + } + else + { + appendLog(str + " " + lines[i]); + } + } + } + + this.srcCheckArgs = function(line_num) + { + line_num = parseInt(line_num); + if (isNaN(line_num) || line_num < 0) + { + appendLog("Non-negative integer number expected"); + return -1; + } + else + { + return line_num; } } @@ -1367,8 +1419,34 @@ function debuggerCommand(event) debuggerObj.sendExceptionConfig(args[2]); break; + case "source": case "src": - debuggerObj.printSource(); + if (!args[2]) + { + debuggerObj.printSource(3); + break; + } + var line_num = debuggerObj.srcCheckArgs(args[2]); + if (line_num >= 0) + { + debuggerObj.printSource(line_num); + break; + } + break; + + case "display": + if (!args[2]) + { + appendLog("Non-negative integer number expected,\ + 0 turns off the automatic source code display"); + break; + } + var line_num = debuggerObj.srcCheckArgs(args[2]); + if (line_num >= 0) + { + debuggerObj.display = line_num; + break; + } break; case "list":