Make source scrolling command in python debugger (#2187)

Source is now scrollable after writing `scroll`.
Keys are `q` to quit, `w` to scroll up `s` to scroll down.

JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu
This commit is contained in:
Daniel Balla
2018-02-07 09:38:54 +01:00
committed by László Langó
parent 67cee1f478
commit e8608707b6
2 changed files with 43 additions and 7 deletions
+40 -4
View File
@@ -24,6 +24,7 @@ import select
import socket
import struct
import sys
import math
# Expected debugger protocol version.
JERRY_DEBUGGER_VERSION = 1
@@ -356,14 +357,37 @@ class DebuggerPrompt(Cmd):
if args:
line_num = src_check_args(args)
if line_num >= 0:
print_source(self.debugger, line_num)
print_source(self.debugger, line_num, 0)
elif line_num == 0:
print_source(self.debugger, self.debugger.default_viewrange)
print_source(self.debugger, self.debugger.default_viewrange, 0)
else:
return
do_source = do_src
def scroll_direction(self, args):
""" Helper function for do_scroll """
self.debugger.src_offset_diff = int(max(math.floor(self.debugger.display / 3), 1))
if args in "up":
self.debugger.src_offset -= self.debugger.src_offset_diff
print_source(self.debugger, self.debugger.display, self.debugger.src_offset)
else:
self.debugger.src_offset += self.debugger.src_offset_diff
print_source(self.debugger, self.debugger.display, self.debugger.src_offset)
def do_scroll(self, args):
""" Scroll the source up or down """
while True:
key = sys.stdin.readline()
if key == 'w\n':
self.scroll_direction("up")
elif key == 's\n':
self.scroll_direction("down")
elif key == 'q\n':
break;
else:
print("Invalid key")
def do_display(self, args):
""" Toggle source code display after breakpoints """
if args:
@@ -543,6 +567,8 @@ class JerryDebugger(object):
self.yellow_bg = ''
self.blue = ''
self.nocolor = ''
self.src_offset = 0
self.src_offset_diff = 0
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client_socket.connect((self.host, self.port))
@@ -900,7 +926,7 @@ def src_check_args(args):
return -1
def print_source(debugger, line_num):
def print_source(debugger, line_num, offset):
last_bp = debugger.last_breakpoint_hit
if not last_bp:
return
@@ -915,6 +941,16 @@ def print_source(debugger, line_num):
else:
start = max(last_bp.line - line_num, 0)
end = min(last_bp.line + line_num - 1, len(last_bp.function.source))
if offset:
if start + offset < 0:
debugger.src_offset += debugger.src_offset_diff
offset += debugger.src_offset_diff
elif end + offset > len(last_bp.function.source):
debugger.src_offset -= debugger.src_offset_diff
offset -= debugger.src_offset_diff
start = max(start + offset, 0)
end = min(end + offset, len(last_bp.function.source))
for i in range(start, end):
if i == last_bp.line - 1:
@@ -1111,7 +1147,7 @@ def main():
print("Stopped %s %s" % (breakpoint_info, breakpoint[0]))
if debugger.display:
print_source(prompt.debugger, debugger.display)
print_source(prompt.debugger, debugger.display, 0)
prompt.cmdloop()
if prompt.quit:
+3 -3
View File
@@ -4,8 +4,8 @@ Stopped at tests/debugger/do_help.js:15
Documented commands (type help <topic>):
========================================
b bt delete e help ms quit src
backtrace c display eval list n s step
break continue dump exception memstats next source
b bt delete e help ms quit source
backtrace c display eval list n s src
break continue dump exception memstats next scroll step
(jerry-debugger) quit