【问题标题】:I can't get this simple LLDB alias to work我无法让这个简单的 LLDB 别名工作
【发布时间】:2011-12-03 03:52:11
【问题描述】:

我想创建一个LLDB别名ps,这样

 ps foo

变成

 print [self foo]

我一直在观看 LLDB 演讲(iTunes 上的 WWDC session 321),基于此,看起来这样做的别名应该是这个:

command alias ps print [ self %1 ]

但它不起作用。在这里,我为我的应用委托提供了一个简单的“count”方法,该方法返回一个整数:

(lldb) command alias ps print [ self %1 ]
(lldb) ps count
error: invalid operands to binary expression ('AppDelegate *' and 'int')
error: 1 errors parsing expression
(lldb) print [ self count ]
(int) $6 = 2
(lldb) 

我错过了什么?

【问题讨论】:

    标签: iphone ios debugging alias lldb


    【解决方案1】:

    似乎参数(%1、%2 等)无法为表达式设置别名。有一个解决方法是使用正则表达式:

    command regex ps 's/(.+)/print [self %1]/'
    

    它为上面的正则表达式创建一个别名 ps:

    (lldb) ps firstName
    print [self firstName]
    (NSString *) $1 = 0x06e64e20 @"John"
    

    但是,这将持续到调试会话结束。您必须在下一次调试会话中再次输入它。如果您希望 ps 命令在调试会话中持续存在,则必须将其保存在 ~/.lldbinit 文件中(如果不存在,则创建一个)。

    请参阅llvm blog 了解有关正则表达式命令的更多信息。

    【讨论】:

    • 我很好奇 - 有人真的有他们的 ~/.lldbinit 文件被 lldb 读取?通过lldbxcrun lldb 甚至通过Xcode,我都没有成功。
    • 在“命令别名”中,%N 替换仅适用于完整的参数或选项值,不适用于部分参数或选项值。这种限制,而不是特定于表达式的限制,是这个问题中的示例不起作用的原因。
    • 这是一个你可以在 Swift 中使用的变体。它适用于 iOS 或 macOS。前缀“斯威夫特”。用于调试 macOS 视图时可以使用它(其中打印的默认设置是发送到您的打印机!)。这里的“mp”代表“我的打印”: command regex mp 's/(.+)/expr Swift.print(%1)/'
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多