[Lldb-commits] [lldb] r121218 - /lldb/trunk/test/expression_command/test/TestExprs.py
Johnny Chen
johnny.chen at apple.com
Tue Dec 7 17:08:27 PST 2010
Author: johnny
Date: Tue Dec 7 19:08:27 2010
New Revision: 121218
URL: http://llvm.org/viewvc/llvm-project?rev=121218&view=rev
Log:
Add test_evaluate_expression_python() to exercise SBFrame.EvaluateExpression() Python API.
Launch the process with ['X', 'Y', 'Z'] as the args to make argc == 4 and verify that's the case,
plus some other EvaluateExpression() calls.
Modified:
lldb/trunk/test/expression_command/test/TestExprs.py
Modified: lldb/trunk/test/expression_command/test/TestExprs.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/expression_command/test/TestExprs.py?rev=121218&r1=121217&r2=121218&view=diff
==============================================================================
--- lldb/trunk/test/expression_command/test/TestExprs.py (original)
+++ lldb/trunk/test/expression_command/test/TestExprs.py Tue Dec 7 19:08:27 2010
@@ -1,10 +1,11 @@
"""
-Test many basic expression commands.
+Test many basic expression commands and SBFrame.EvaluateExpression() API.
"""
import os, time
import unittest2
import lldb
+import lldbutil
from lldbtest import *
class BasicExprCommandsTestCase(TestBase):
@@ -69,6 +70,89 @@
# (const char *) $8 = 0x... "/Volumes/data/lldb/svn/trunk/test/expression_command/test/a.out"
+ def test_evaluate_expression_python(self):
+ """These SBFrame.EvaluateExpression() API."""
+ self.buildDefault()
+
+ exe = os.path.join(os.getcwd(), "a.out")
+
+ target = self.dbg.CreateTarget(exe)
+ self.assertTrue(target.IsValid(), VALID_TARGET)
+
+ # Create the breakpoint.
+ filespec = lldb.SBFileSpec("main.cpp", False)
+ breakpoint = target.BreakpointCreateByLocation(filespec, self.line)
+ self.assertTrue(breakpoint.IsValid(), VALID_BREAKPOINT)
+
+ # Verify the breakpoint just created.
+ self.expect(repr(breakpoint), BREAKPOINT_CREATED, exe=False,
+ substrs = ['main.cpp',
+ str(self.line)])
+
+ # Launch the process, and do not stop at the entry point.
+ # Pass 'X Y Z' as the args, which makes argc == 4.
+ rc = lldb.SBError()
+ self.process = target.Launch(['X', 'Y', 'Z'], [], os.ctermid(), 0, False, rc)
+
+ if not rc.Success() or not self.process.IsValid():
+ self.fail("SBTarget.LaunchProcess() failed")
+
+ if self.process.GetState() != lldb.eStateStopped:
+ self.fail("Process should be in the 'stopped' state, "
+ "instead the actual state is: '%s'" %
+ lldbutil.StateTypeString(self.process.GetState()))
+
+ # The stop reason of the thread should be breakpoint.
+ thread = self.process.GetThreadAtIndex(0)
+ if thread.GetStopReason() != lldb.eStopReasonBreakpoint:
+ from lldbutil import StopReasonString
+ self.fail(STOPPED_DUE_TO_BREAKPOINT_WITH_STOP_REASON_AS %
+ StopReasonString(thread.GetStopReason()))
+
+ # The filename of frame #0 should be 'main.cpp' and function is main.
+ self.expect(lldbutil.GetFilenames(thread)[0],
+ "Break correctly at main.cpp", exe=False,
+ startstr = "main.cpp")
+ self.expect(lldbutil.GetFunctionNames(thread)[0],
+ "Break correctly at main()", exe=False,
+ startstr = "main")
+
+ # We should be stopped on the breakpoint with a hit count of 1.
+ self.assertTrue(breakpoint.GetHitCount() == 1, BREAKPOINT_HIT_ONCE)
+
+ #
+ # Use Python API to evaluate expressions while stopped in a stack frame.
+ #
+ frame = thread.GetFrameAtIndex(0)
+
+ val = frame.EvaluateExpression("2.234")
+ self.expect(val.GetValue(frame), "2.345 evaluated correctly", exe=False,
+ startstr = "2.234")
+ self.expect(val.GetTypeName(), "2.345 evaluated correctly", exe=False,
+ startstr = "double")
+ self.DebugSBValue(frame, val)
+
+ val = frame.EvaluateExpression("argc")
+ self.expect(val.GetValue(frame), "Argc evaluated correctly", exe=False,
+ startstr = "4")
+ self.DebugSBValue(frame, val)
+
+ val = frame.EvaluateExpression("*argv[1]")
+ self.expect(val.GetValue(frame), "Argv[1] evaluated correctly", exe=False,
+ startstr = "'X'")
+ self.DebugSBValue(frame, val)
+
+ val = frame.EvaluateExpression("*argv[2]")
+ self.expect(val.GetValue(frame), "Argv[2] evaluated correctly", exe=False,
+ startstr = "'Y'")
+ self.DebugSBValue(frame, val)
+
+ val = frame.EvaluateExpression("*argv[3]")
+ self.expect(val.GetValue(frame), "Argv[3] evaluated correctly", exe=False,
+ startstr = "'Z'")
+ self.DebugSBValue(frame, val)
+
+
@unittest2.expectedFailure
# rdar://problem/8686536
# CommandInterpreter::HandleCommand is stripping \'s from input for WantsRawCommand commands
More information about the lldb-commits
mailing list