diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2010-12-16 01:41:37 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2010-12-16 01:41:37 +0000 |
| commit | 6becf1c9247721fc1d1d9bce1805da2d07a52d32 (patch) | |
| tree | 50e2b6e5d7b86aebd6486f67b9d74d186dda16bc /lldb/test/python_api/symbol-context | |
| parent | 6ab34afc4ebeb05e47531c379935031949a2d7e7 (diff) | |
| download | bcm5719-llvm-6becf1c9247721fc1d1d9bce1805da2d07a52d32.tar.gz bcm5719-llvm-6becf1c9247721fc1d1d9bce1805da2d07a52d32.zip | |
Add python_api/symbol-context to test getting the symbol context while stopped
on a frame and to exercise the methods of SBSymbolContext.
llvm-svn: 121941
Diffstat (limited to 'lldb/test/python_api/symbol-context')
| -rw-r--r-- | lldb/test/python_api/symbol-context/Makefile | 5 | ||||
| -rw-r--r-- | lldb/test/python_api/symbol-context/TestSymbolContext.py | 100 | ||||
| -rw-r--r-- | lldb/test/python_api/symbol-context/main.c | 51 |
3 files changed, 156 insertions, 0 deletions
diff --git a/lldb/test/python_api/symbol-context/Makefile b/lldb/test/python_api/symbol-context/Makefile new file mode 100644 index 00000000000..0d70f259501 --- /dev/null +++ b/lldb/test/python_api/symbol-context/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules diff --git a/lldb/test/python_api/symbol-context/TestSymbolContext.py b/lldb/test/python_api/symbol-context/TestSymbolContext.py new file mode 100644 index 00000000000..488006c77c8 --- /dev/null +++ b/lldb/test/python_api/symbol-context/TestSymbolContext.py @@ -0,0 +1,100 @@ +""" +Test SBSymbolContext APIs. +""" + +import os, time +import re +import unittest2 +import lldb, lldbutil +from lldbtest import * + +class SymbolContextAPITestCase(TestBase): + + mydir = os.path.join("python_api", "symbol-context") + + @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") + @python_api_test + def test_with_dsym(self): + """Exercise SBSymbolContext API extensively.""" + self.buildDsym() + self.symbol_context() + + @python_api_test + def test_with_dwarf(self): + """Exercise SBSymbolContext API extensively.""" + self.buildDwarf() + self.symbol_context() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # Find the line number to of function 'c'. + self.line = line_number('main.c', '// Find the line number of function "c" here.') + + def symbol_context(self): + """Get an SBSymbolContext object and call its many methods.""" + exe = os.path.join(os.getcwd(), "a.out") + + # Create a target by the debugger. + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid(), VALID_TARGET) + + # Now create a breakpoint on main.c by name 'c'. + breakpoint = target.BreakpointCreateByName('c', 'a.out') + #print "breakpoint:", breakpoint + self.assertTrue(breakpoint.IsValid() and + breakpoint.GetNumLocations() == 1, + VALID_BREAKPOINT) + + # Now launch the process, and do not stop at entry point. + self.process = target.LaunchProcess([''], [''], os.ctermid(), 0, False) + + self.process = target.GetProcess() + self.assertTrue(self.process.IsValid(), PROCESS_IS_VALID) + + # Frame #0 should be on self.line. + frame0 = self.process.GetThreadAtIndex(0).GetFrameAtIndex(0) + self.assertTrue(frame0.GetLineEntry().GetLine() == self.line) + + # Now get the SBSymbolContext from this frame. We want everything. :-) + context = frame0.GetSymbolContext(lldb.eSymbolContextEverything) + self.assertTrue(context.IsValid()) + + module = context.GetModule() + self.expect(repr(module), "The module should match", exe=False, + substrs = [os.path.join(self.mydir, 'a.out')]) + #print "module:", module + + compileUnit = context.GetCompileUnit() + self.expect(repr(compileUnit), "The compile unit should match", exe=False, + substrs = [os.path.join(self.mydir, 'main.c')]) + #print "compile unit:", compileUnit + + function = context.GetFunction() + self.assertTrue(function.IsValid()) + #print "function:", function + + block = context.GetBlock() + self.assertTrue(block.IsValid()) + #print "block:", block + + lineEntry = context.GetLineEntry() + self.expect(lineEntry.GetFileSpec().GetDirectory(), "The line entry should have the correct directory", + exe=False, + substrs = [self.mydir]) + self.expect(lineEntry.GetFileSpec().GetFilename(), "The line entry should have the correct filename", + exe=False, + substrs = ['main.c']) + self.assertTrue(lineEntry.GetLine() == self.line, + "The line entry's line number should match ") + + symbol = context.GetSymbol() + self.assertTrue(function.GetName() == symbol.GetName() and symbol.GetName() == 'c', + "The symbol name should be 'c'") + + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() diff --git a/lldb/test/python_api/symbol-context/main.c b/lldb/test/python_api/symbol-context/main.c new file mode 100644 index 00000000000..3ac1825d8d2 --- /dev/null +++ b/lldb/test/python_api/symbol-context/main.c @@ -0,0 +1,51 @@ +//===-- main.c --------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#include <stdio.h> + +// This simple program is to test the lldb Python API SBSymbolContext. +// When stopped on a frame, we can get the symbol context using the SBFrame API +// SBFrame.GetSymbolContext(). + +int a(int); +int b(int); +int c(int); + +int a(int val) +{ + if (val <= 1) + return b(val); + else if (val >= 3) + return c(val); + + return val; +} + +int b(int val) +{ + return c(val); +} + +int c(int val) +{ + return val + 3; // Find the line number of function "c" here. +} + +int main (int argc, char const *argv[]) +{ + int A1 = a(1); // a(1) -> b(1) -> c(1) + printf("a(1) returns %d\n", A1); + + int B2 = b(2); // b(2) -> c(2) + printf("b(2) returns %d\n", B2); + + int A3 = a(3); // a(3) -> c(3) + printf("a(3) returns %d\n", A3); + + return 0; +} |

