From 5f734dfdf871602df51af61a0025df95b242ae50 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Thu, 28 Apr 2022 20:48:11 +0200 Subject: [PATCH] Add memory dump command to GDB interface --- gdb-port/commands.py | 9 +++++++++ gdb-port/tests/unit/top-level-parse.py | 14 ++++++++++++++ gdb-port/top-level-parse.py | 3 +++ 3 files changed, 26 insertions(+) diff --git a/gdb-port/commands.py b/gdb-port/commands.py index 453ccbe..ec1e557 100644 --- a/gdb-port/commands.py +++ b/gdb-port/commands.py @@ -141,3 +141,12 @@ class HammerParserCurrentEnv(gdb.Command): print(type(p_env).__name__ + " - " + str(p_env)) # TODO: consistency with GUI HammerParserCurrentEnv() + +class HammerParserDumpMemoryStats(gdb.Command): + def __init__(self): + super(HammerParserDumpMemoryStats, self).__init__("hammer-parser-dump-memory-stats", gdb.COMMAND_OBSCURE) + print(":: hammer-parser-dump-memory-stats") + + def invoke(self, arg, from_tty): + stats = top_level_parse.dump_memory_stats() + print(stats) diff --git a/gdb-port/tests/unit/top-level-parse.py b/gdb-port/tests/unit/top-level-parse.py index 0872e51..dd7b914 100644 --- a/gdb-port/tests/unit/top-level-parse.py +++ b/gdb-port/tests/unit/top-level-parse.py @@ -163,3 +163,17 @@ class TopLevelParseStateManagement(unittest.TestCase): self.parser1.add_mem_use(128, 50) parser2.add_mem_use(16, 60) self.assertEqual(self.top_level_parse.get_avg_mem_use_per_arena(), {16: 55, 128: 50}) + + def test_dump_memory_stats(self): + self.top_level_parse.parser_stacks.append(self.ps1) + self.top_level_parse.parser_objs[32] = self.parser1 + self.ps1.push(self.parser1) + parser2 = Parser("bar", 48) + self.top_level_parse.parser_objs[48] = parser2 + self.ps1.push(parser2) + self.parser1.add_mem_use(16, 50) + self.parser1.add_mem_use(128, 50) + parser2.add_mem_use(16, 60) + + stats = self.top_level_parse.dump_memory_stats() + self.assertEqual(stats, [('foo', '0x20', {16: 50, 128: 50}), ('bar', '0x30', {16: 60})]) diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py index 9f7b2c1..d37e8ba 100644 --- a/gdb-port/top-level-parse.py +++ b/gdb-port/top-level-parse.py @@ -167,6 +167,9 @@ class TopLevelParse: return averages + def dump_memory_stats(self): + return [(p.name, hex(p.address), p.bytes_used) for p in self.parser_objs.values()] + # TODO: get_avg_mem_use_all_arenas, get_total_mem_use top_level_parse = TopLevelParse() -- GitLab