在 lldb 中切换到 Objective-C 模式
Switch to Objective-C mode in lldb
当我在 Xcode 中调试 Swift 应用程序时,调试器需要 Swift 格式的表达式。如何将其切换为期望 Objective-C 表达式?
例如,我希望能够输入 expr id $foo = [[SomeClass alloc] initWithBar:@"quux"];
而不是 Swift 等价物。
Swift 3.0 或之前使用:
您可以使用以下命令来识别 LLDB 中所有可用语言的名称。
Swift 4.0
创建一个像 "eco" 这样的别名来打印 objective-c 个对象:
(lldb)command alias eco expression -l objective-c -o --
(lldb)eco [[UIApplication sharedApplication] userHomeDirectory]
/Users/...
Advanced debugging with Xcode and LLDB 来自 WWDC 2018,表明这可以通过以下命令完成:
expression -l objc -O -- [doYourStuff here]
但这里有一件重要的事情需要注意,从 Swift 切换到 Objective C 框架会创建一个 新上下文 。实际上,这意味着您可能会收到如下错误:
error: use of undeclared identifier 'self'
为避免此问题,您需要将需要在上下文更改之前计算的任何变量括在反引号中 `
。例如:
expression -l objc -O -- [`self` class]
当我在 Xcode 中调试 Swift 应用程序时,调试器需要 Swift 格式的表达式。如何将其切换为期望 Objective-C 表达式?
例如,我希望能够输入 expr id $foo = [[SomeClass alloc] initWithBar:@"quux"];
而不是 Swift 等价物。
Swift 3.0 或之前使用: 您可以使用以下命令来识别 LLDB 中所有可用语言的名称。
Swift 4.0
创建一个像 "eco" 这样的别名来打印 objective-c 个对象:
(lldb)command alias eco expression -l objective-c -o --
(lldb)eco [[UIApplication sharedApplication] userHomeDirectory]
/Users/...
Advanced debugging with Xcode and LLDB 来自 WWDC 2018,表明这可以通过以下命令完成:
expression -l objc -O -- [doYourStuff here]
但这里有一件重要的事情需要注意,从 Swift 切换到 Objective C 框架会创建一个 新上下文 。实际上,这意味着您可能会收到如下错误:
error: use of undeclared identifier 'self'
为避免此问题,您需要将需要在上下文更改之前计算的任何变量括在反引号中 `
。例如:
expression -l objc -O -- [`self` class]