diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2011-10-17 22:17:47 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2011-10-17 22:17:47 +0000 |
| commit | 9df05592f0e2b570e8045bd415e42c8af5310c99 (patch) | |
| tree | b96294a9fdc8a610be289cc155e02b033f25e32d /lldb/test/python_api | |
| parent | 70b8d76e645c0f4de557fde27467eac578909af7 (diff) | |
| download | bcm5719-llvm-9df05592f0e2b570e8045bd415e42c8af5310c99.tar.gz bcm5719-llvm-9df05592f0e2b570e8045bd415e42c8af5310c99.zip | |
Add test cases for setting condition on a watchpoint for both command and API.
llvm-svn: 142291
Diffstat (limited to 'lldb/test/python_api')
4 files changed, 136 insertions, 0 deletions
diff --git a/lldb/test/python_api/default-constructor/sb_watchpoint.py b/lldb/test/python_api/default-constructor/sb_watchpoint.py index 29d58628e57..a028cb48c4c 100644 --- a/lldb/test/python_api/default-constructor/sb_watchpoint.py +++ b/lldb/test/python_api/default-constructor/sb_watchpoint.py @@ -18,3 +18,5 @@ def fuzz_obj(obj): obj.GetIgnoreCount() obj.SetIgnoreCount(5) obj.GetDescription(lldb.SBStream(), lldb.eDescriptionLevelVerbose) + obj.SetCondition("shouldWeStop()") + obj.GetCondition() diff --git a/lldb/test/python_api/watchpoint/condition/Makefile b/lldb/test/python_api/watchpoint/condition/Makefile new file mode 100644 index 00000000000..314f1cb2f07 --- /dev/null +++ b/lldb/test/python_api/watchpoint/condition/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules diff --git a/lldb/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py b/lldb/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py new file mode 100644 index 00000000000..bfbbc91e616 --- /dev/null +++ b/lldb/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py @@ -0,0 +1,101 @@ +""" +Test watchpoint condition API. +""" + +import os, time +import unittest2 +import lldb +import lldbutil +from lldbtest import * + +class WatchpointConditionAPITestCase(TestBase): + + mydir = os.path.join("python_api", "watchpoint", "condition") + + 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.line = line_number(self.source, '// Set break point at this line.') + # And the watchpoint variable declaration line number. + self.decl = line_number(self.source, '// Watchpoint variable declaration.') + # 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} + + @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") + def test_watchpoint_cond_api_with_dsym(self): + """Test watchpoint condition API.""" + self.buildDsym(dictionary=self.d) + self.setTearDownCleanup(dictionary=self.d) + self.watchpoint_condition_api() + + def test_watchpoint_cond_api_with_dwarf(self): + """Test watchpoint condition API.""" + self.buildDwarf(dictionary=self.d) + self.setTearDownCleanup(dictionary=self.d) + self.watchpoint_condition_api() + + def watchpoint_condition_api(self): + """Do watchpoint condition API to set condition as 'global==5'.""" + exe = os.path.join(os.getcwd(), self.exe_name) + + # Create a target by the debugger. + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + + # Now create a breakpoint on main.c. + breakpoint = target.BreakpointCreateByLocation(self.source, self.line) + self.assertTrue(breakpoint and + breakpoint.GetNumLocations() == 1, + VALID_BREAKPOINT) + + # Now launch the process, and do not stop at the entry point. + process = target.LaunchSimple(None, None, os.getcwd()) + + # We should be stopped due to the breakpoint. Get frame #0. + process = target.GetProcess() + self.assertTrue(process.GetState() == lldb.eStateStopped, + PROCESS_STOPPED) + thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) + frame0 = thread.GetFrameAtIndex(0) + + # Watch 'global' for write. + value = frame0.FindValue('global', lldb.eValueTypeVariableGlobal) + watchpoint = value.Watch(True, False, True) + self.assertTrue(value and watchpoint, + "Successfully found the variable and set a watchpoint") + self.DebugSBValue(value) + + # Now set the condition as "global==5". + watchpoint.SetCondition('global==5') + self.expect(watchpoint.GetCondition(), exe=False, + startstr = 'global==5') + + # Hide stdout if not running with '-t' option. + if not self.TraceOn(): + self.HideStdout() + + print watchpoint + + # Continue. Expect the program to stop due to the variable being written to. + process.Continue() + + if (self.TraceOn()): + lldbutil.print_stacktraces(process) + + thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonWatchpoint) + self.assertTrue(thread, "The thread stopped due to watchpoint") + self.DebugSBValue(value) + + # Verify that the condition is met. + self.assertTrue(value.GetValueAsUnsigned() == 5) + + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() diff --git a/lldb/test/python_api/watchpoint/condition/main.cpp b/lldb/test/python_api/watchpoint/condition/main.cpp new file mode 100644 index 00000000000..f4c3527f8af --- /dev/null +++ b/lldb/test/python_api/watchpoint/condition/main.cpp @@ -0,0 +1,28 @@ +//===-- 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> +#include <stdint.h> + +int32_t global = 0; // Watchpoint variable declaration. + +static void modify(int32_t &var) { + ++var; +} + +int main(int argc, char** argv) { + int local = 0; + printf("&global=%p\n", &global); + printf("about to write to 'global'...\n"); // Set break point at this line. + // When stopped, watch 'global', + // for the condition "global == 5". + for (int i = 0; i < 10; ++i) + modify(global); + + printf("global=%d\n", global); +} |

