""" Test lldb-dap terminated event """ import dap_server from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import lldbdap_testcase import re import json class TestDAP_terminatedEvent(lldbdap_testcase.DAPTestCaseBase): @skipIfWindows def test_terminated_event(self): """ Terminated Event Now contains the statistics of a debug session: metatdata: totalDebugInfoByteSize > 0 totalDebugInfoEnabled > 0 totalModuleCountHasDebugInfo > 0 ... targetInfo: totalBreakpointResolveTime > 0 breakpoints: recognize function breakpoint recognize source line breakpoint It should contains the breakpoints info: function bp & source line bp """ program_basename = "a.out.stripped" program = self.getBuildArtifact(program_basename) self.build_and_launch(program) # Set breakpoints functions = ["foo"] # This breakpoint will be resolved only when the libfoo module is loaded breakpoint_ids = self.set_function_breakpoints( functions, wait_for_resolve=False ) self.assertEqual(len(breakpoint_ids), len(functions), "expect one breakpoint") main_bp_line = line_number("main.cpp", "// main breakpoint 1") breakpoint_ids.append( self.set_source_breakpoints( "main.cpp", [main_bp_line], wait_for_resolve=False ) ) self.continue_to_breakpoints(breakpoint_ids) self.continue_to_exit() statistics = self.dap_server.wait_for_terminated()["body"]["$__lldb_statistics"] self.assertGreater(statistics["totalDebugInfoByteSize"], 0) self.assertGreater(statistics["totalDebugInfoEnabled"], 0) self.assertGreater(statistics["totalModuleCountHasDebugInfo"], 0) self.assertIsNotNone(statistics["memory"]) self.assertNotIn("modules", statistics.keys()) # lldb-dap debugs one target at a time target = json.loads(statistics["targets"])[0] self.assertGreater(target["totalBreakpointResolveTime"], 0) breakpoints = target["breakpoints"] self.assertIn( "foo", breakpoints[0]["details"]["Breakpoint"]["BKPTResolver"]["Options"][ "SymbolNames" ], "foo is a symbol breakpoint", ) self.assertTrue( breakpoints[1]["details"]["Breakpoint"]["BKPTResolver"]["Options"][ "FileName" ].endswith("main.cpp"), "target has source line breakpoint in main.cpp", )