Home | History | Annotate | Download | only in process
      1 """
      2 Test SBprocess and SBThread APIs with printing of the stack traces using lldbutil.
      3 """
      4 
      5 import os, time
      6 import re
      7 import unittest2
      8 import lldb
      9 from lldbtest import *
     10 
     11 class ThreadsStackTracesTestCase(TestBase):
     12 
     13     mydir = "python_api/lldbutil/process"
     14 
     15     def setUp(self):
     16         # Call super's setUp().
     17         TestBase.setUp(self)
     18         # Find the line number to break inside main().
     19         self.line = line_number('main.cpp', '// Set break point at this line.')
     20 
     21     @expectedFailureFreeBSD("llvm.org/pr16696") # live debugging lacks threaded inferior support
     22     @expectedFailureLinux # llvm.org/pr14323
     23     @python_api_test
     24     def test_stack_traces(self):
     25         """Test SBprocess and SBThread APIs with printing of the stack traces."""
     26         self.buildDefault()
     27         self.break_and_print_stacktraces()
     28 
     29     def break_and_print_stacktraces(self):
     30         """Break at main.cpp:68 and do a threads dump"""
     31         exe = os.path.join(os.getcwd(), "a.out")
     32 
     33         target = self.dbg.CreateTarget(exe)
     34         self.assertTrue(target, VALID_TARGET)
     35 
     36         breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line)
     37         self.assertTrue(breakpoint, VALID_BREAKPOINT)
     38 
     39         # Now launch the process, and do not stop at entry point.
     40         process = target.LaunchSimple(["abc", "xyz"], None, os.getcwd())
     41 
     42         if not process:
     43             self.fail("SBTarget.LaunchProcess() failed")
     44 
     45         import lldbutil
     46         if process.GetState() != lldb.eStateStopped:
     47             self.fail("Process should be in the 'stopped' state, "
     48                       "instead the actual state is: '%s'" %
     49                       lldbutil.state_type_to_str(process.GetState()))
     50 
     51         stacktraces = lldbutil.print_stacktraces(process, string_buffer=True)
     52         self.expect(stacktraces, exe=False,
     53             substrs = ['(int)argc=3'])
     54 
     55 
     56 if __name__ == '__main__':
     57     import atexit
     58     lldb.SBDebugger.Initialize()
     59     atexit.register(lambda: lldb.SBDebugger.Terminate())
     60     unittest2.main()
     61