2011-10-07 63 views
3

我想創建一個LLDB別名PS,這樣我不能讓這個簡單的LLDB別名工作

ps foo 

成爲

print [self foo] 

我一直在看的LLDB通話(WWDC會話321在iTunes上),並基於此,它看起來像做別名應該是這一個:

command alias ps print [ self %1 ] 

但它不起作用。在這裏,我給我的應用程序委託一個簡單的「數」方法,它返回一個整數:

(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) 

我缺少什麼?

回答

3

似乎參數(%1,%2等)不能用於別名表達式。有一種變通方法,通過使用正則表達式來代替:

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

它使一個別名爲PS的上述正則表達式:

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

然而,這將持續到調試會話結束。您將不得不再次輸入以用於下一個調試會話。如果你希望你的ps命令在調試會話中保存,你必須將它保存在〜/ .lldbinit文件中(如果它不存在,創建一個)。

請參閱llvm blog瞭解更多有關regex命令的信息。

+0

我很好奇 - 有人確實有他們的〜/ .lldbinit文件被lldb讀取?我還沒有通過'lldb','xcrun lldb'或者甚至通過Xcode獲得任何成功。 – meowsqueak

+0

@meowsqueak:當然,我的工作與Xcode。 –

+0

在「命令別名」中,%N個替換僅適用於完整參數或選項值,而不適用於參數或選項值的部分。這個限制,而不是特定的表達,是這個問題中的例子不起作用的原因。 –