mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-09 22:56:04 +00:00
118 lines
4.3 KiB
Python
118 lines
4.3 KiB
Python
# encoding: utf-8
|
|
"""
|
|
Test lldb's frame recognizers.
|
|
"""
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
import recognizer
|
|
|
|
class FrameRecognizerTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@skipUnlessDarwin
|
|
def test_frame_recognizer_1(self):
|
|
self.build()
|
|
|
|
target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
|
|
self.assertTrue(target, VALID_TARGET)
|
|
|
|
self.runCmd("command script import " + os.path.join(self.getSourceDir(), "recognizer.py"))
|
|
|
|
self.expect("frame recognizer list",
|
|
substrs=['no matching results found.'])
|
|
|
|
self.runCmd("frame recognizer add -l recognizer.MyFrameRecognizer -s a.out -n foo")
|
|
|
|
self.expect("frame recognizer list",
|
|
substrs=['0: recognizer.MyFrameRecognizer, module a.out, function foo'])
|
|
|
|
self.runCmd("frame recognizer add -l recognizer.MyOtherFrameRecognizer -s a.out -n bar -x")
|
|
|
|
self.expect("frame recognizer list",
|
|
substrs=['0: recognizer.MyFrameRecognizer, module a.out, function foo',
|
|
'1: recognizer.MyOtherFrameRecognizer, module a.out, function bar (regexp)'
|
|
])
|
|
|
|
self.runCmd("frame recognizer delete 0")
|
|
|
|
self.expect("frame recognizer list",
|
|
substrs=['1: recognizer.MyOtherFrameRecognizer, module a.out, function bar (regexp)'])
|
|
|
|
self.runCmd("frame recognizer clear")
|
|
|
|
self.expect("frame recognizer list",
|
|
substrs=['no matching results found.'])
|
|
|
|
self.runCmd("frame recognizer add -l recognizer.MyFrameRecognizer -s a.out -n foo")
|
|
|
|
lldbutil.run_break_set_by_symbol(self, "foo")
|
|
self.runCmd("r")
|
|
|
|
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs=['stopped', 'stop reason = breakpoint'])
|
|
|
|
process = target.GetProcess()
|
|
thread = process.GetSelectedThread()
|
|
frame = thread.GetSelectedFrame()
|
|
|
|
self.assertEqual(frame.GetSymbol().GetName(), "foo")
|
|
self.assertFalse(frame.GetLineEntry().IsValid())
|
|
|
|
self.expect("frame variable",
|
|
substrs=['(int) a = 42', '(int) b = 56'])
|
|
|
|
# Recognized arguments don't show up by default...
|
|
variables = frame.GetVariables(lldb.SBVariablesOptions())
|
|
self.assertEqual(variables.GetSize(), 0)
|
|
|
|
# ...unless you set target.display-recognized-arguments to 1...
|
|
self.runCmd("settings set target.display-recognized-arguments 1")
|
|
variables = frame.GetVariables(lldb.SBVariablesOptions())
|
|
self.assertEqual(variables.GetSize(), 2)
|
|
|
|
# ...and you can reset it back to 0 to hide them again...
|
|
self.runCmd("settings set target.display-recognized-arguments 0")
|
|
variables = frame.GetVariables(lldb.SBVariablesOptions())
|
|
self.assertEqual(variables.GetSize(), 0)
|
|
|
|
# ... or explicitly ask for them with SetIncludeRecognizedArguments(True).
|
|
opts = lldb.SBVariablesOptions()
|
|
opts.SetIncludeRecognizedArguments(True)
|
|
variables = frame.GetVariables(opts)
|
|
|
|
self.assertEqual(variables.GetSize(), 2)
|
|
self.assertEqual(variables.GetValueAtIndex(0).name, "a")
|
|
self.assertEqual(variables.GetValueAtIndex(0).signed, 42)
|
|
self.assertEqual(variables.GetValueAtIndex(1).name, "b")
|
|
self.assertEqual(variables.GetValueAtIndex(1).signed, 56)
|
|
|
|
self.expect("frame recognizer info 0",
|
|
substrs=['frame 0 is recognized by recognizer.MyFrameRecognizer'])
|
|
|
|
self.expect("frame recognizer info 999", error=True,
|
|
substrs=['no frame with index 999'])
|
|
|
|
self.expect("frame recognizer info 1",
|
|
substrs=['frame 1 not recognized by any recognizer'])
|
|
|
|
# FIXME: The following doesn't work yet, but should be fixed.
|
|
"""
|
|
lldbutil.run_break_set_by_symbol(self, "bar")
|
|
self.runCmd("c")
|
|
|
|
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs=['stopped', 'stop reason = breakpoint'])
|
|
|
|
self.expect("frame variable -t",
|
|
substrs=['(int *) a = '])
|
|
|
|
self.expect("frame variable -t *a",
|
|
substrs=['*a = 78'])
|
|
"""
|