diff options
author | dim <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
commit | 78b9749c0a4ea980a8b934645da6ae98fcc665e8 (patch) | |
tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py | |
parent | 60cb593f9d55fa5ca7a5372b731f2330345b4b9a (diff) | |
download | FreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.zip FreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.tar.gz |
Vendor import of lldb trunk r256945:
https://llvm.org/svn/llvm-project/lldb/trunk@256945
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py')
-rw-r--r-- | packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py b/packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py new file mode 100644 index 0000000..c7fb53d --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/stop-hook/multiple_threads/TestStopHookMultipleThreads.py @@ -0,0 +1,77 @@ +""" +Test that lldb stop-hook works for multiple threads. +""" + +from __future__ import print_function + + + +import os, time +import lldb +from lldbsuite.test import configuration +from lldbsuite.test.lldbtest import * + +class StopHookForMultipleThreadsTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # Our simple source filename. + self.source = 'main.cpp' + # Find the line number to break inside main(). + self.first_stop = line_number(self.source, '// Set break point at this line, and add a stop-hook.') + self.thread_function = line_number(self.source, '// Break here to test that the stop-hook mechanism works for multiple threads.') + # Build dictionary to have unique executable names for each test method. + self.exe_name = self.testMethodName + self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name} + + @expectedFlakeyFreeBSD("llvm.org/pr15037") + @expectedFlakeyLinux("llvm.org/pr15037") # stop hooks sometimes fail to fire on Linux + @expectedFailureHostWindows("llvm.org/pr22274: need a pexpect replacement for windows") + def test_stop_hook_multiple_threads(self): + """Test that lldb stop-hook works for multiple threads.""" + self.build(dictionary=self.d) + self.setTearDownCleanup(dictionary=self.d) + + import pexpect + exe = os.path.join(os.getcwd(), self.exe_name) + prompt = "(lldb) " + + # So that the child gets torn down after the test. + self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.lldbOption)) + child = self.child + # Turn on logging for what the child sends back. + if self.TraceOn(): + child.logfile_read = sys.stdout + + if lldb.remote_platform: + child.expect_exact(prompt) + child.sendline('platform select %s' % lldb.remote_platform.GetName()) + child.expect_exact(prompt) + child.sendline('platform connect %s' % configuration.lldb_platform_url) + child.expect_exact(prompt) + child.sendline('platform settings -w %s' % configuration.lldb_platform_working_dir) + + child.expect_exact(prompt) + child.sendline('target create %s' % exe) + + # Set the breakpoint, followed by the target stop-hook commands. + child.expect_exact(prompt) + child.sendline('breakpoint set -f main.cpp -l %d' % self.first_stop) + child.expect_exact(prompt) + child.sendline('breakpoint set -f main.cpp -l %d' % self.thread_function) + child.expect_exact(prompt) + + # Now run the program, expect to stop at the first breakpoint which is within the stop-hook range. + child.sendline('run') + child.expect_exact("Process") # 'Process 2415 launched', 'Process 2415 stopped' + child.expect_exact(prompt) + child.sendline('target stop-hook add -o "frame variable --show-globals g_val"') + child.expect_exact("Stop hook") # 'Stop hook #1 added.' + child.expect_exact(prompt) + + # Continue and expect to find the output emitted by the firing of our stop hook. + child.sendline('continue') + child.expect_exact('(uint32_t) ::g_val = ') |