无法在 LLDB 中传递 CGColorRef 类型的参数
Can't pass parameter of type CGColorRef in LLDB
我正在扩展 Facebook 的 Chisel 以便能够从调试器中可视化颜色。我希望它适用于 UIColor
、CIColor
和 CGColorRef
。两个基于对象的工作正常,但是 CGColorRef
给我带来了麻烦。
Here 是我正在解决的错误,我已经从这个问题中找出了一堆东西。
我已将问题归结为这个测试用例:
如果我有一些功能:
+ (UIColor *)someColor {
UIColor *uiColor = [UIColor redColor];
CGColorRef cgColor = uiColor.CGColor;
UIColor *newUIColor = [UIColor colorWithCGColor:cgColor];
return newUIColor;
}
然后我在 return newUIColor;
行设置了一个断点,这就是 LLDB 中发生的事情:
(lldb) po cgColor
<CGColor 0x7f992b626710> [<CGColorSpace 0x7f992b70d5b0> (kCGColorSpaceDeviceRGB)] ( 0 0.478431 1 1 )
(lldb) po [UIColor colorWithCGColor:cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an lvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColorRef)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(id)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'id'
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColor *)cgColor]
error: use of undeclared identifier 'CGColor'
error: expected expression
error: 2 errors parsing expression
(lldb) expr @import CoreGraphics
(lldb) po [UIColor colorWithCGColor:(CGColorRef)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColor *)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColor *'
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(struct CGColor *)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'struct CGColor *'
error: 1 errors parsing expression
那么,如何让 lldb
执行带有 CGColorRef
类型参数的行?
我能够使用以下方法让它工作:
(lldb) po [[UIColor alloc] initWithCGColor:cgColor]
UIDeviceRGBColorSpace 1 0 0 1
来自UIColor.h
:
@property(nonatomic,readonly) CGColorRef CGColor;
- (CGColorRef)CGColor NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED;
所以我认为 UIColor
超出范围并且 .CGColor
的内存不再有效。我可能不得不复制它,但出于我的目的,使用 -initWithCGColor:
效果很好。
我正在扩展 Facebook 的 Chisel 以便能够从调试器中可视化颜色。我希望它适用于 UIColor
、CIColor
和 CGColorRef
。两个基于对象的工作正常,但是 CGColorRef
给我带来了麻烦。
Here 是我正在解决的错误,我已经从这个问题中找出了一堆东西。
我已将问题归结为这个测试用例:
如果我有一些功能:
+ (UIColor *)someColor {
UIColor *uiColor = [UIColor redColor];
CGColorRef cgColor = uiColor.CGColor;
UIColor *newUIColor = [UIColor colorWithCGColor:cgColor];
return newUIColor;
}
然后我在 return newUIColor;
行设置了一个断点,这就是 LLDB 中发生的事情:
(lldb) po cgColor
<CGColor 0x7f992b626710> [<CGColorSpace 0x7f992b70d5b0> (kCGColorSpaceDeviceRGB)] ( 0 0.478431 1 1 )
(lldb) po [UIColor colorWithCGColor:cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an lvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColorRef)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(id)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'id'
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColor *)cgColor]
error: use of undeclared identifier 'CGColor'
error: expected expression
error: 2 errors parsing expression
(lldb) expr @import CoreGraphics
(lldb) po [UIColor colorWithCGColor:(CGColorRef)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColorRef' (aka 'CGColor *')
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(CGColor *)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'CGColor *'
error: 1 errors parsing expression
(lldb) po [UIColor colorWithCGColor:(struct CGColor *)cgColor]
error: cannot initialize a parameter of type 'CGColor *' with an rvalue of type 'struct CGColor *'
error: 1 errors parsing expression
那么,如何让 lldb
执行带有 CGColorRef
类型参数的行?
我能够使用以下方法让它工作:
(lldb) po [[UIColor alloc] initWithCGColor:cgColor]
UIDeviceRGBColorSpace 1 0 0 1
来自UIColor.h
:
@property(nonatomic,readonly) CGColorRef CGColor;
- (CGColorRef)CGColor NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED;
所以我认为 UIColor
超出范围并且 .CGColor
的内存不再有效。我可能不得不复制它,但出于我的目的,使用 -initWithCGColor:
效果很好。