Files
clang-p2996/lldb/test/python_api/lldbutil/process/TestPrintStackTraces.py
Vince Harron 091a95d412 TestPrintStackTraces - made XFAIL more precise
Works with x86_64 inferior, fails w/i386 inferior - updated test to
reflect

llvm-svn: 233717
2015-03-31 17:45:54 +00:00

66 lines
2.2 KiB
Python

"""
Test SBprocess and SBThread APIs with printing of the stack traces using lldbutil.
"""
import os, time
import re
import unittest2
import lldb
from lldbtest import *
class ThreadsStackTracesTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# Find the line number to break inside main().
self.line = line_number('main.cpp', '// Set break point at this line.')
# llvm.org/pr23043 - leaving the next two lines in so it's easy to find this
# test will appear when searching for expectedFailure(Linux|i386)
#@expectedFailureLinux
#@expectedFailurei386
@python_api_test
def test_stack_traces(self):
"""Test SBprocess and SBThread APIs with printing of the stack traces."""
self.buildDefault()
self.break_and_print_stacktraces()
def break_and_print_stacktraces(self):
"""Break at main.cpp:68 and do a threads dump"""
if self.getArchitecture() in ['i386'] and "linux" in sys.platform:
self.skipTest("Skipping because this test is known to fail on i386 Linux")
exe = os.path.join(os.getcwd(), "a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)
breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line)
self.assertTrue(breakpoint, VALID_BREAKPOINT)
# Now launch the process, and do not stop at entry point.
process = target.LaunchSimple (["abc", "xyz"], None, self.get_process_working_directory())
if not process:
self.fail("SBTarget.LaunchProcess() failed")
import lldbutil
if process.GetState() != lldb.eStateStopped:
self.fail("Process should be in the 'stopped' state, "
"instead the actual state is: '%s'" %
lldbutil.state_type_to_str(process.GetState()))
stacktraces = lldbutil.print_stacktraces(process, string_buffer=True)
self.expect(stacktraces, exe=False,
substrs = ['(int)argc=3'])
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()