182

在 Xcode 中,GDB 允许您在调试时更改局部变量(请参阅如何在 XCode 中调试时更改 NSString 值?)。LLDB 是否提供类似的功能?如果是这样,我们如何使用它?

4

3 回答 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,然后测试代码流,您可以尝试以下操作。

  1. 初始化为所需值后正确放置断点。
  2. 然后在lldb命令行中执行“expression dict = nil”来改变它。(例如“零”)
  3. 跨过断点。
  4. 检查下一行中的变量“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 回答