Skip to content

Commit b4451d2

Browse files
kastiglioneDave Lee
authored andcommitted
Evaluate visualize argument first thing
The input to `visualize` can be Swift, in which case it can't just be injected into an objc expression. This change evaluates the argument in whatever language is used in this stack frame, then passes the evaluated (an address) result into objc.
1 parent c3d7e95 commit b4451d2

File tree

2 files changed

+7
-12
lines changed

2 files changed

+7
-12
lines changed

commands/FBVisualizationCommands.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def _showImage(commandForImage):
6060
def _colorIsCGColorRef(color):
6161
color = '(CGColorRef)(' + color + ')'
6262

63-
frame = lldb.debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
64-
result = frame.EvaluateExpression('(unsigned long)CFGetTypeID({color}) == (unsigned long)CGColorGetTypeID()'.format(color=color))
63+
result = fb.evaluateExpressionValue('(unsigned long)CFGetTypeID({color}) == (unsigned long)CGColorGetTypeID()'.format(color=color))
6564

6665
if result.GetError() is not None and str(result.GetError()) != 'success':
6766
print "got error: {}".format(result)
@@ -87,8 +86,7 @@ def _showColor(color):
8786
fb.evaluateEffect('[(id){} setFill]'.format(colorToUse))
8887
fb.evaluateEffect('UIRectFill((CGRect)CGRectMake(0.0, 0.0, {imageSize}, {imageSize}))'.format(imageSize=imageSize))
8988

90-
frame = lldb.debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
91-
result = frame.EvaluateExpression('(UIImage *)UIGraphicsGetImageFromCurrentImageContext()')
89+
result = fb.evaluateExpressionValue('(UIImage *)UIGraphicsGetImageFromCurrentImageContext()')
9290
if result.GetError() is not None and str(result.GetError()) != 'success':
9391
print "got error {}".format(result)
9492
print result.GetError()
@@ -111,8 +109,7 @@ def _showLayer(layer):
111109
fb.evaluateEffect('UIGraphicsBeginImageContextWithOptions(' + size + ', NO, 0.0)')
112110
fb.evaluateEffect('[(id)' + layer + ' renderInContext:(void *)UIGraphicsGetCurrentContext()]')
113111

114-
frame = lldb.debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
115-
result = frame.EvaluateExpression('(UIImage *)UIGraphicsGetImageFromCurrentImageContext()')
112+
result = fb.evaluateExpressionValue('(UIImage *)UIGraphicsGetImageFromCurrentImageContext()')
116113
if result.GetError() is not None and str(result.GetError()) != 'success':
117114
print result.GetError()
118115
else:
@@ -124,8 +121,7 @@ def _showLayer(layer):
124121
def _dataIsImage(data):
125122
data = '(' + data + ')'
126123

127-
frame = lldb.debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
128-
result = frame.EvaluateExpression('(id)[UIImage imageWithData:' + data + ']')
124+
result = fb.evaluateExpressionValue('(id)[UIImage imageWithData:' + data + ']')
129125

130126
if result.GetError() is not None and str(result.GetError()) != 'success':
131127
return False
@@ -136,8 +132,7 @@ def _dataIsImage(data):
136132
def _dataIsString(data):
137133
data = '(' + data + ')'
138134

139-
frame = lldb.debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
140-
result = frame.EvaluateExpression('(NSString*)[[NSString alloc] initWithData:' + data + ' encoding:4]')
135+
result = fb.evaluateExpressionValue('(NSString*)[[NSString alloc] initWithData:' + data + ' encoding:4]')
141136

142137
if result.GetError() is not None and str(result.GetError()) != 'success':
143138
return False
@@ -146,7 +141,7 @@ def _dataIsString(data):
146141
return isString
147142

148143
def _visualize(target):
149-
target = '(' + target + ')'
144+
target = fb.evaluateInputExpression(target)
150145

151146
if fb.evaluateBooleanExpression('(unsigned long)CFGetTypeID((CFTypeRef)' + target + ') == (unsigned long)CGImageGetTypeID()'):
152147
_showImage('(id)[UIImage imageWithCGImage:' + target + ']')

fblldbobjecthelpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import fblldbbase as fb
1212

1313
def isKindOfClass(obj, className):
14-
isKindOfClassStr = '[' + obj + 'isKindOfClass:[{} class]]'
14+
isKindOfClassStr = '[(id)' + obj + ' isKindOfClass:[{} class]]'
1515
return fb.evaluateBooleanExpression(isKindOfClassStr.format(className))
1616

1717
def className(obj):

0 commit comments

Comments
 (0)