在 Xcode 中,GDB 允许您在调试时更改局部变量(请参阅如何在 XCode 中调试时更改 NSString 值?)。LLDB 是否提供类似的功能?如果是这样,我们如何使用它?
问问题
74978 次
3 回答
283
expr myString = @"Foo"
(lldb) help expr
使用当前范围内的变量在当前程序上下文中计算 C/ObjC/C++ 表达式。此命令采用“原始”输入(无需引用内容)。语法:表达式——
命令选项用法:表达式 [-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.
例子:
expr my_struct->a = my_array[3]
expr -f bin -- (index * 8) + 5
expr char c[] = "foo"; c[0]重要说明:由于此命令采用“原始”输入,因此如果您使用任何命令选项,则必须在命令选项的结尾和原始输入的开头之间使用“-”。
“expr”是“表达式”的缩写
于 2012-03-28T12:43:21.893 回答
23
以下内容对我有用。我正在使用 Xcode 8。
如果您想将某个变量(例如“dict”)设置为 nil,然后测试代码流,您可以尝试以下操作。
- 初始化为所需值后正确放置断点。
- 然后在lldb命令行中执行“expression dict = nil”来改变它。(例如“零”)
- 跨过断点。
- 检查下一行中的变量“dict”。它将为零。
它看起来像在控制台中。
(lldb) expression dict = nil
(NSDictionary *) $5 = nil
于 2017-01-06T09:31:08.850 回答
6
如果您使用的是 Xcode 10 或 11,则在初始化为所需变量后正确放置断点,那么您可以轻松更改变量po myString = "Hello World"
。
于 2019-09-30T08:14:37.773 回答