在lldb中切换到Objective-C模式

Bre*_*ent 8 ios lldb

当我在Xcode中调试Swift应用程序时,调试器需要Swift格式的表达式.如何将其切换为期望Objective-C表达式呢?

例如,我希望能够键入expr id $foo = [[SomeClass alloc] initWithBar:@"quux"];而不是Swift等价物.

and*_*wan 13

Swift 3.0或使用前: 您可以使用以下命令识别LLDB中所有可用语言的名称.

(lldb)帮助<language>

Swift 4.0

(lldb)帮助<source-language>

创建一个像"eco"这样的别名来打印objective-c对象:

(lldb)command alias eco expression -l objective-c -o --
(lldb)eco [[UIApplication sharedApplication] userHomeDirectory] 
/Users/...
Run Code Online (Sandbox Code Playgroud)

  • 似乎不再工作(Xcode 9.3):`(lldb) help &lt;language&gt;` _(linebreak)_ `error: '&lt;language&gt;' is not a known command.` _(linebreak)_ `Try 'help ' 查看当前的命令列表。` _(linebreak)_ `尝试使用 'apropos &lt;language&gt;' 获取相关命令的列表。` _(linebreak)_ `尝试使用 'type lookup &lt;language&gt;' 获取有关类型的信息,方法、函数、模块等` (2认同)

Nik*_*jic 5

从WWDC 2018 使用Xcode和LLDB进行的高级调试显示可以使用以下命令完成此操作:

expression -l objc -O -- [doYourStuff here]
Run Code Online (Sandbox Code Playgroud)

但是要注意的是,从Swift切换到Objective C框架会创建一个新上下文。实际上,这意味着您可能会遇到类似以下的错误:

error: use of undeclared identifier 'self'
Run Code Online (Sandbox Code Playgroud)

为避免此问题,您需要将所有需要在上下文更改之前求值的变量括在反引号中`。例如:

expression -l objc -O -- [`self` class]
Run Code Online (Sandbox Code Playgroud)