【问题标题】:Is it possible to enter an objective-C for loop as an LLDB expression?是否可以将 Objective-C for 循环作为 LLDB 表达式输入?
【发布时间】:2013-12-19 21:33:00
【问题描述】:

我已经看到传递语句,您可以在 LLDB 命令中输入复杂的语句,如 for 循环(使用您正在调试的程序的语言 - 在本例中为 Objective-C)

我真的很想能够做到这一点。我从来没有学过 Python,并且不想花时间这样做以使用可用的 Python LLDB 支持 - 一天中没有足够的时间。

【问题讨论】:

    标签: objective-c lldb


    【解决方案1】:

    您可以使用expr -- ... 输入Objective-C 语句,例如:

    (lldb) po myArray ( 富, 酒吧 ) (lldb) expr -- for (NSString *s in myArray) { (void)NSLog(@"%@", s) ; } 2013-12-03 18:29:03.637 myapp [1373:70b] foo 2013-12-03 18:29:03.639 myapp [1373:70b] 酒吧

    【讨论】:

    • 或者,更简单地说,您可以说 (lldb) expr ,然后您就可以输入任意多行的代码。要结束,请创建一个空行并再次按 。然后,LLDB 将继续评估您键入的任何代码块。但是,我不确定这是否是 Python 支持的一般替代方案。这两个功能(表达式解析器和脚本)有不同的基本原理和用例,是的,在某些情况下,使用什么取决于您,但在其他情况下,使用其中一个更明显。你到底想达到什么目的?
    • 我无法让它工作。我尝试了简单的语句 expr -- (void) for (int x = 0;x
    • 好的,经过一些修改,我终于可以让它工作了。我需要对循环内的语句进行 void 强制转换。这是我工作的代码: expr for (int x = 0; x
    • (在其他新闻中,printf 返回一个 int :-)
    • @DuncanC expr -- for (int x = 0;x<5;x++) printf("x = %d\n", x); 为我工作。请注意 for 语句 缺少 void 强制转换。只有当 lldb 无法确定表达式类型时才需要强制转换(例如:某些 objc 消息传递)
    【解决方案2】:

    基于@“Martin R”的回答。

    至少NSLog 似乎没有使用 Xcode 6.0.1 打印内容。

    (lldb) expr -- for(UIWindow *w in [(UIApplication *)[UIApplication sharedApplication] windows]) { (int)printf("%s\n\n", [(NSString *)[w recursiveDescription] UTF8String]); }
    

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 2014-07-31
      • 2016-02-14
      • 2016-10-18
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多