import lldb from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil from lldbsuite.test.decorators import * class TestTraceLoad(TestBase): mydir = TestBase.compute_mydir(__file__) NO_DEBUG_INFO_TESTCASE = True def setUp(self): TestBase.setUp(self) if 'intel-pt' not in configuration.enabled_plugins: self.skipTest("The intel-pt test plugin is not enabled") def expectGenericHelpMessageForStartCommand(self): self.expect("help thread trace start", substrs=["Syntax: thread trace start []"]) def testStartStopSessionFileThreads(self): # it should fail for processes from json session files self.expect("trace load -v " + os.path.join(self.getSourceDir(), "intelpt-trace", "trace.json")) self.expect("thread trace start", error=True, substrs=["error: Tracing is not supported. Can't trace a non-live process"]) # the help command should be the generic one, as it's not a live process self.expectGenericHelpMessageForStartCommand() # this should fail because 'trace stop' is not yet implemented self.expect("thread trace stop", error=True, substrs=["error: Failed stopping thread 3842849"]) @skipIf(oslist=no_match(['linux']), archs=no_match(['i386', 'x86_64'])) def testStartStopLiveThreads(self): # The help command should be the generic one if there's no process running self.expectGenericHelpMessageForStartCommand() self.expect("thread trace start", error=True, substrs=["error: Process not available"]) self.expect("file " + os.path.join(self.getSourceDir(), "intelpt-trace", "a.out")) self.expect("b main") self.expect("thread trace start", error=True, substrs=["error: Process not available"]) # The help command should be the generic one if there's still no process running self.expectGenericHelpMessageForStartCommand() self.expect("r") # the help command should be the intel-pt one now self.expect("help thread trace start", substrs=["Start tracing one or more threads with intel-pt.", "Syntax: thread trace start [ ...] []"]) self.expect("thread trace start", patterns=["would trace tid .* with size_in_kb 4 and custom_config 0"]) self.expect("thread trace start --size 20 --custom-config 1", patterns=["would trace tid .* with size_in_kb 20 and custom_config 1"]) # This fails because "trace stop" is not yet implemented. self.expect("thread trace stop", error=True, substrs=["error: Process is not being traced"]) self.expect("c") # Now the process has finished, so the commands should fail self.expect("thread trace start", error=True, substrs=["error: Process must be launched"]) self.expect("thread trace stop", error=True, substrs=["error: Process must be launched"])