如何在Xcode中使用LLVM进行调试时更改变量值?

时间:2012-03-28 12:21:35

标签: xcode debugging lldb

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

3 个答案:

答案 0 :(得分:244)

expr myString = @"Foo"
  

(lldb)帮助expr
  评估当前的C / ObjC / C ++表达式   程序上下文,使用当前范围内的变量。这个命令   采取“原始”输入(无需引用内容)。

     

语法:expression -

     

命令选项用法:表达式[-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-&gt; a = my_array [3]
       expr -f bin - (索引* 8)+ 5
  expr char c [] =“foo”; c [0]

     

重要说明:因为此命令采用“原始”输入,如果使用任何命令选项,则必须在结尾之间使用“ - ”   命令选项和原始输入的开头。

     

'expr'是'expression'的缩写

答案 1 :(得分:12)

以下内容对我有用。 我正在使用Xcode 8。

如果要将某个变量(例如“dict”)设置为nil然后测试代码流,可以尝试以下操作。

  1. 初始化后将断点正确放入所需的值。
  2. 然后在lldb命令行中执行“expression dict = nil”来更改它。 (例如“nil”)
  3. 跨过断点。
  4. 检查下一行中的变量“dict”。它将是零。
  5. 它看起来像在控制台中。

    (lldb) expression dict = nil
    (NSDictionary *) $5 = nil
    

答案 2 :(得分:3)

如果您使用的是Xcode 10或11,则在将断点初始化为所需变量后正确放置该断点,然后可以使用po myString = "Hello World"轻松更改变量。