如何在Xcode中调试时更改NSString值?

xma*_*tin 48 debugging xcode

当我在Xcode的断点停止时,我可以看到NSString变量的值.我怎样才能改变它们?我可以更改int或double变量,但不能更改NSString.

Mik*_*keG 83

您可以在调试控制台中执行此操作.说你有NSString* myVar.在控制台中(gdb),键入后set myVar = @"My new string".如果您正在使用(lldb),请改用等效表达式expr myVar = @"My new string".

这可能无法在变量面板中正确显示,但您可以通过进入po myVar控制台来验证该值.您的代码应该获取新值.

有关使用的一些很好的信息expr,请查看此StackOverflow帖子.

  • 您正在使用XCode 4.3.x中已知错误的变体.参见[this post](http://stackoverflow.com/questions/9515630/lldb-fails-to-print-variable-values-with-error-reference-to-id-is-ambiguous).根据答案,这在XCode 4.4中得到了解决 (2认同)

n8t*_*8tr 7

您可以但必须从调试器命令提示符调用代码.例如,假设您在此行之后立即触发断点:

NSString *myString = @"My current string";
Run Code Online (Sandbox Code Playgroud)

然后在(gdb)提示符下键入:

call myString = @"My new string"
Run Code Online (Sandbox Code Playgroud)

您可以po myString在更改字符串之前和更改字符串之后验证它是否已更改.

另一个例子:假设您想要更改视图控制器的标题.你可以使用setter.*注意:调试器命令行不支持点表示法.例如,让视图加载,然后在视图控制器的生命周期内的某处设置断点.然后这样做:

call (id)[self setTitle:@"New Title"]
Run Code Online (Sandbox Code Playgroud)

继续运行该程序,您应该看到视图控制器的标题更新.

  • 我的回答很老.你现在可以这样做:**po myString = @"my_new_string"**和**po self.title = @"New Title"** (5认同)