| """ |
| Test some lldb command abbreviations. |
| """ |
| |
| import os, time |
| import unittest2 |
| import lldb |
| from lldbtest import * |
| |
| class AbbreviationsTestCase(TestBase): |
| |
| mydir = "abbreviation_tests" |
| |
| def test_nonrunning_command_abbreviations (self): |
| self.expect("ap script", |
| startstr = "The following commands may relate to 'script':", |
| substrs = ['breakpoint command add', |
| 'breakpoint command list', |
| 'breakpoint list', |
| 'commands alias', |
| 'expression', |
| 'script']) |
| |
| self.runCmd("com a alias com al") |
| self.runCmd("alias gurp help") |
| self.expect("gurp file", |
| substrs = ['Syntax: file <cmd-options> <filename>']) |
| self.runCmd("com u gurp") |
| self.expect("gurp", |
| COMMAND_FAILED_AS_EXPECTED, error = True, |
| substrs = ["error: 'gurp' is not a valid command."]) |
| |
| self.expect("h", |
| startstr = "The following is a list of built-in, permanent debugger commands:") |
| |
| |
| self.expect("com s ./change_prompt.lldb", |
| patterns = ["Executing commands in '.*change_prompt.lldb'"]) |
| |
| self.expect("settings show prompt", |
| startstr = "prompt (string) = '[old-oak]'") |
| |
| |
| self.runCmd("settings set -r prompt") |
| self.expect("settings show prompt", |
| startstr = "prompt (string) = '(lldb) '") |
| |
| |
| self.expect("lo li", |
| startstr = "Logging categories for 'lldb':") |
| |
| self.runCmd("se se prompt Sycamore> ") |
| self.expect("se sh prompt", |
| startstr = "prompt (string) = 'Sycamore>'") |
| |
| self.runCmd("se se -r prompt") |
| self.expect("set sh prompt", |
| startstr = "prompt (string) = '(lldb) '") |
| |
| self.runCmd (r'''sc print "\n\n\tHello!\n"''') |
| |
| |
| @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") |
| def test_with_dsym (self): |
| self.buildDsym () |
| self.running_abbreviations () |
| |
| def test_with_dwarf (self): |
| self.buildDwarf () |
| self.running_abbreviations () |
| |
| def running_abbreviations (self): |
| exe = os.path.join (os.getcwd(), "a.out") |
| self.expect("fil " + exe, |
| patterns = [ "Current executable set to .*a.out.*" ]) |
| |
| self.expect("regex product", |
| substrs = [ "breakpoint set --name 'product'", |
| "Breakpoint created: 1: name = 'product', locations = 1" ]) |
| |
| self.expect("br s -n sum", |
| startstr = "Breakpoint created: 2: name = 'sum', locations = 1") |
| |
| self.expect("br s -f main.cpp -l 32", |
| startstr = "Breakpoint created: 3: file ='main.cpp', line = 32, locations = 1") |
| |
| self.runCmd("br co a -s python 1 -o 'print frame'") |
| self.expect("br co l 1", |
| substrs = [ "Breakpoint 1:", |
| "Breakpoint commands:", |
| "print frame" ]) |
| |
| self.runCmd("br co rem 1") |
| self.expect("breakpoint command list 1", |
| startstr = "Breakpoint 1 does not have an associated command.") |
| |
| self.expect("br di", |
| startstr = 'All breakpoints disabled. (3 breakpoints)') |
| |
| self.expect("bre e", |
| startstr = "All breakpoints enabled. (3 breakpoints)") |
| |
| self.expect("break list", |
| substrs = ["1: name = 'product', locations = 1", |
| "2: name = 'sum', locations = 1", |
| "3: file ='main.cpp', line = 32, locations = 1"]) |
| self.expect("br cl -l 32 -f main.cpp", |
| startstr = "1 breakpoints cleared:", |
| substrs = ["3: file ='main.cpp', line = 32, locations = 1"]) |
| |
| self.expect("pro la", |
| patterns = [ "Process .* launched: "]) |
| |
| self.expect("pro st", |
| patterns = [ "Process .* stopped", |
| "thread #1:", |
| "a.out", |
| "sum\(int, int\)", |
| "at main.cpp\:25", |
| "stop reason = breakpoint 2.1" ]) |
| |
| self.expect("d -f", |
| startstr = "a.out`sum(int, int):", |
| substrs = [' push', |
| ' mov', |
| ' addl ', |
| 'ret'], |
| patterns = ['(leave|popq|popl)']) |
| |
| self.expect("i d l main.cpp", |
| patterns = ["Line table for .*main.cpp in `a.out"]) |
| |
| self.expect("i d se", |
| startstr = "Dumping sections for 5 modules.") |
| |
| self.expect("i d symf", |
| startstr = "Dumping debug symbols for 5 modules.") |
| |
| self.expect("i d symt", |
| startstr = "Dumping symbol table for 5 modules.") |
| |
| self.expect("i li", |
| substrs = [ 'a.out', |
| '/usr/lib/dyld', |
| '/usr/lib/libstdc++', |
| '/usr/lib/libSystem.B.dylib', |
| '/usr/lib/system/libmathCommon.A.dylib']) |
| |
| # Terminate the current process being debugged. |
| # The test framework was relying on detecting either "run" or |
| # "process launch" command to automatically kill the inferior. |
| self.runCmd("process kill") |
| |
| |
| if __name__ == '__main__': |
| import atexit |
| lldb.SBDebugger.Initialize() |
| atexit.register(lambda: lldb.SBDebugger.Terminate()) |
| unittest2.main() |
| |