在Xcode中调试LLDB时如何更改变量值?
在Xcode中,GDB允许您在调试时更改局部变量(请参阅)。LLDB是否提供类似的功能?如果是,我们如何使用它在Xcode中调试LLDB时如何更改变量值?,xcode,debugging,lldb,Xcode,Debugging,Lldb,在Xcode中,GDB允许您在调试时更改局部变量(请参阅)。LLDB是否提供类似的功能?如果是,我们如何使用它 expr myString = @"Foo" (lldb)帮助表达式 在当前 程序上下文,使用范围中当前的变量。此命令 接受“原始”输入(无需引用内容) 语法:表达式-- 命令选项用法:表达式[-f][-G] [-d][-u]--表达式[-o][-d ][-u]--表达式 -G <gdb-format> ( --gdb-format <gdb-format&
expr myString = @"Foo"
(lldb)帮助表达式在当前 程序上下文,使用范围中当前的变量。此命令 接受“原始”输入(无需引用内容) 语法:表达式-- 命令选项用法:表达式[-f][-G] [-d][-u]--表达式[-o][-d ][-u]--表达式
-G <gdb-format> ( --gdb-format <gdb-format> )
Specify a format using a GDB format specifier string.
-d <boolean> ( --dynamic-value <boolean> )
Upcast the value resulting from the expression to its dynamic type
if available.
-f <format> ( --format <format> )
Specify a format to be used for display.
-o ( --object-description )
Print the object description of the value resulting from the
expression.
-u <boolean> ( --unwind-on-error <boolean> )
Clean up program state if the expression causes a crash, breakpoint
hit or signal.
-G(--gdb格式)
使用GDB格式说明符字符串指定格式。
-d(--动态值)
将表达式产生的值向上转换为其动态类型
如果有的话。
-f(--格式)
指定要用于显示的格式。
-o(--对象描述)
打印生成的值的对象描述
表情。
-u(--错误时展开)
如果表达式导致崩溃或断点,请清除程序状态
击中或发出信号。
示例:
expr my_struct->a=my_数组[3]expr-f bin--(索引*8)+5
expr char c[]=“foo”;c[0] 重要提示:由于此命令接受“原始”输入,因此如果使用任何命令选项,则必须在 命令选项和原始输入的开头 “expr”是“expression”的缩写
下面的东西对我很有用。 我使用的是Xcode 8 如果要将某个变量(例如“dict”)设置为nil,然后测试代码流,可以尝试以下操作
(lldb) expression dict = nil
(NSDictionary *) $5 = nil
如果您使用的是Xcode 10或11,请在初始化为所需变量后正确放置断点,然后您可以使用
po myString=“Hello World”
轻松更改变量。的确,谢谢!还有一个小问题:我这样做是为了尝试更改UILabel的文本:'expr myLabel.text=@“hello!”
但是我得到一个错误:在类型为“UILabel*”的对象上找不到属性“text”
。。。有什么想法吗?expr(void)[label setText:@“Foo”]
应该这样做。点语法通常在调试器中不起作用。lldb可能将其解释为您想要访问c-struct的成员,但我不确定这是否是它无法工作的原因。点语法也不适用于po
。您必须使用po[label text]
而不是po label.text
实际上,lldb处理点语法的能力比gdb要好得多。gdb只是假设您将其视为一个C-struct,但它失败了。lldb将正确访问属性,但前提是它们实际上是用@property
声明的。您还可以使用p
作为expr
的快捷方式。示例:(lldb)pURL=@”http://google.com“
您也可以使用e
作为expr
的快捷方式。顺便说一句,p
是用于打印的别名,它是expr--
的别名(仅评估原始输入,无标志)expr-o--[object]
或po
通常会为对象提供更有用的输出。请确保查看。我正在尝试设置一个objects属性,如果字符串长度在0-15个字符之间,它就可以工作。设置一个包含16个或更多字符的字符串是可以接受的,但当我打印回来时,它会显示一个无意义的字符串:po myObj.someString=“123456789012345646”,这是有效的,但是当我打印时,我得到了(字符串?$R68=“\0\0\0@\a\u{1}\c{5}\0\0\0\0\0\0\”