| import lldb | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test.decorators import * | |
| import lldbsuite.test.lldbutil as lldbutil | |
| class TestCase(TestBase): | |
| @requireDarwin | |
| def test(self): | |
| self.build() | |
| _, _, thread, _ = lldbutil.run_to_source_breakpoint( | |
| self, "break here", lldb.SBFileSpec("lib.cpp") | |
| ) | |
| frame = thread.selected_frame | |
| self.assertEqual(frame.GuessLanguage(), lldb.eLanguageTypeC_plus_plus_11) | |
| self.assertEqual(frame.name, "f()") | |
| # Test `help`. | |
| self.expect( | |
| "help demangle", | |
| substrs=[ | |
| "Demangle a C++ mangled name.", | |
| "Syntax: language cplusplus demangle [<mangled-name> ...]", | |
| ], | |
| ) | |
| # Run a `language cplusplus` command. | |
| self.expect("demangle _Z1fv", startstr="_Z1fv ---> f()") | |
| # Test prefix matching. | |
| self.expect("dem _Z1fv", startstr="_Z1fv ---> f()") | |
| # Select the objc caller. | |
| self.runCmd("up") | |
| frame = thread.selected_frame | |
| self.assertEqual(frame.GuessLanguage(), lldb.eLanguageTypeObjC_plus_plus) | |
| self.assertEqual(frame.name, "main") | |
| # Ensure `demangle` doesn't resolve from the objc frame. | |
| self.expect("help demangle", error=True) | |
| # Run a `language objc` command. | |
| self.expect( | |
| "tagged-pointer", | |
| substrs=[ | |
| "Commands for operating on Objective-C tagged pointers.", | |
| "Syntax: tagged-pointer <subcommand> [<subcommand-options>]", | |
| "The following subcommands are supported:", | |
| "info -- Dump information on a tagged pointer.", | |
| ], | |
| ) | |
| # To ensure compatability with existing scripts, a language specific | |
| # command must not be invoked if another command (such as a python | |
| # command) has the language specific command name as its prefix. | |
| # | |
| # For example, this test loads a `tagged-pointer-collision` command. A | |
| # script could exist that invokes this command using its prefix | |
| # `tagged-pointer`, under the assumption that "tagged-pointer" uniquely | |
| # identifies the python command `tagged-pointer-collision`. | |
| self.runCmd("command script import commands.py") | |
| self.expect("tagged-pointer", startstr="ran tagged-pointer-collision") |