Implement memstats command in the debugger (#1838)

Implementation of memstats command in jerry-debugger, python and html client.
Shows the allocated bytes, byte code bytes, string bytes, object bytes, property bytes and heap size.

JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu
This commit is contained in:
Daniel Balla
2017-05-23 11:19:15 +02:00
committed by Zoltan Herczeg
parent e58f2880df
commit 8894077656
5 changed files with 151 additions and 48 deletions
+34 -15
View File
@@ -48,25 +48,27 @@ var JERRY_DEBUGGER_SOURCE_CODE_NAME_END = 10;
var JERRY_DEBUGGER_FUNCTION_NAME = 11;
var JERRY_DEBUGGER_FUNCTION_NAME_END = 12;
var JERRY_DEBUGGER_RELEASE_BYTE_CODE_CP = 13;
var JERRY_DEBUGGER_BREAKPOINT_HIT = 14;
var JERRY_DEBUGGER_EXCEPTION_HIT = 15;
var JERRY_DEBUGGER_BACKTRACE = 16;
var JERRY_DEBUGGER_BACKTRACE_END = 17;
var JERRY_DEBUGGER_EVAL_RESULT = 18;
var JERRY_DEBUGGER_EVAL_RESULT_END = 19;
var JERRY_DEBUGGER_EVAL_ERROR = 20;
var JERRY_DEBUGGER_EVAL_ERROR_END = 21;
var JERRY_DEBUGGER_MEMSTATS_RECEIVE = 14;
var JERRY_DEBUGGER_BREAKPOINT_HIT = 15;
var JERRY_DEBUGGER_EXCEPTION_HIT = 16;
var JERRY_DEBUGGER_BACKTRACE = 17;
var JERRY_DEBUGGER_BACKTRACE_END = 18;
var JERRY_DEBUGGER_EVAL_RESULT = 19;
var JERRY_DEBUGGER_EVAL_RESULT_END = 20;
var JERRY_DEBUGGER_EVAL_ERROR = 21;
var JERRY_DEBUGGER_EVAL_ERROR_END = 22;
var JERRY_DEBUGGER_FREE_BYTE_CODE_CP = 1;
var JERRY_DEBUGGER_UPDATE_BREAKPOINT = 2;
var JERRY_DEBUGGER_EXCEPTION_CONFIG = 3;
var JERRY_DEBUGGER_STOP = 4;
var JERRY_DEBUGGER_CONTINUE = 5;
var JERRY_DEBUGGER_STEP = 6;
var JERRY_DEBUGGER_NEXT = 7;
var JERRY_DEBUGGER_GET_BACKTRACE = 8;
var JERRY_DEBUGGER_EVAL = 9;
var JERRY_DEBUGGER_EVAL_PART = 10;
var JERRY_DEBUGGER_MEMSTATS = 4;
var JERRY_DEBUGGER_STOP = 5;
var JERRY_DEBUGGER_CONTINUE = 6;
var JERRY_DEBUGGER_STEP = 7;
var JERRY_DEBUGGER_NEXT = 8;
var JERRY_DEBUGGER_GET_BACKTRACE = 9;
var JERRY_DEBUGGER_EVAL = 10;
var JERRY_DEBUGGER_EVAL_PART = 11;
var textBox = document.getElementById("log");
var commandBox = document.getElementById("command");
@@ -806,6 +808,18 @@ function DebuggerClient(address)
return;
}
case JERRY_DEBUGGER_MEMSTATS_RECEIVE:
{
var messagedata = decodeMessage("IIIII", message, 1);
appendLog("Allocated bytes: " + messagedata[0]);
appendLog("Byte code bytes: " + messagedata[1]);
appendLog("String bytes: " + messagedata[2]);
appendLog("Object bytes: " + messagedata[3]);
appendLog("Property bytes: " + messagedata[4]);
return;
}
case JERRY_DEBUGGER_BREAKPOINT_HIT:
case JERRY_DEBUGGER_EXCEPTION_HIT:
{
@@ -1287,6 +1301,11 @@ function debuggerCommand(event)
debuggerObj.encodeMessage("B", [ JERRY_DEBUGGER_STOP ]);
break;
case "ms":
case "memstats":
debuggerObj.encodeMessage("B", [ JERRY_DEBUGGER_MEMSTATS ]);
break;
case "c":
case "continue":
debuggerObj.sendResumeExec(JERRY_DEBUGGER_CONTINUE);
+36 -15
View File
@@ -39,27 +39,29 @@ JERRY_DEBUGGER_SOURCE_CODE_NAME_END = 10
JERRY_DEBUGGER_FUNCTION_NAME = 11
JERRY_DEBUGGER_FUNCTION_NAME_END = 12
JERRY_DEBUGGER_RELEASE_BYTE_CODE_CP = 13
JERRY_DEBUGGER_BREAKPOINT_HIT = 14
JERRY_DEBUGGER_EXCEPTION_HIT = 15
JERRY_DEBUGGER_BACKTRACE = 16
JERRY_DEBUGGER_BACKTRACE_END = 17
JERRY_DEBUGGER_EVAL_RESULT = 18
JERRY_DEBUGGER_EVAL_RESULT_END = 19
JERRY_DEBUGGER_EVAL_ERROR = 20
JERRY_DEBUGGER_EVAL_ERROR_END = 21
JERRY_DEBUGGER_MEMSTATS_RECEIVE = 14
JERRY_DEBUGGER_BREAKPOINT_HIT = 15
JERRY_DEBUGGER_EXCEPTION_HIT = 16
JERRY_DEBUGGER_BACKTRACE = 17
JERRY_DEBUGGER_BACKTRACE_END = 18
JERRY_DEBUGGER_EVAL_RESULT = 19
JERRY_DEBUGGER_EVAL_RESULT_END = 20
JERRY_DEBUGGER_EVAL_ERROR = 21
JERRY_DEBUGGER_EVAL_ERROR_END = 22
# Messages sent by the client to server.
JERRY_DEBUGGER_FREE_BYTE_CODE_CP = 1
JERRY_DEBUGGER_UPDATE_BREAKPOINT = 2
JERRY_DEBUGGER_EXCEPTION_CONFIG = 3
JERRY_DEBUGGER_STOP = 4
JERRY_DEBUGGER_CONTINUE = 5
JERRY_DEBUGGER_STEP = 6
JERRY_DEBUGGER_NEXT = 7
JERRY_DEBUGGER_GET_BACKTRACE = 8
JERRY_DEBUGGER_EVAL = 9
JERRY_DEBUGGER_EVAL_PART = 10
JERRY_DEBUGGER_MEMSTATS = 4
JERRY_DEBUGGER_STOP = 5
JERRY_DEBUGGER_CONTINUE = 6
JERRY_DEBUGGER_STEP = 7
JERRY_DEBUGGER_NEXT = 8
JERRY_DEBUGGER_GET_BACKTRACE = 9
JERRY_DEBUGGER_EVAL = 10
JERRY_DEBUGGER_EVAL_PART = 11
MAX_BUFFER_SIZE = 128
WEBSOCKET_BINARY_FRAME = 2
@@ -389,6 +391,12 @@ class DebuggerPrompt(Cmd):
self.debugger.send_exception_config(enable)
def do_memstats(self, args):
""" Memory statistics """
self.exec_command(args, JERRY_DEBUGGER_MEMSTATS);
return
do_ms = do_memstats
class Multimap(object):
@@ -932,6 +940,19 @@ def main():
prompt.cmdloop()
elif buffer_type == JERRY_DEBUGGER_MEMSTATS_RECEIVE:
memory_stats = struct.unpack(debugger.byte_order + debugger.idx_format *5,
data[3: 3 + 4 *5])
print("Allocated bytes: %d" % (memory_stats[0]))
print("Byte code bytes: %d" % (memory_stats[1]))
print("String bytes: %d" % (memory_stats[2]))
print("Object bytes: %d" % (memory_stats[3]))
print("Property bytes: %d" % (memory_stats[4]))
prompt.cmdloop()
else:
raise Exception("Unknown message")