2012-10-02 57 views
0

我使用的Xcode 4.3.3,我想设置象征性的端点。我为所有objc_msgSend符号创建了一个符号断点,我想将它与“调试器输出”结合起来。LLDB Xcode中:错误:printf的'不是一个有效的命令

我跟着的this post in SO的提示。但是在我的调试器中,消息

error: 'printf' is not a valid command.

出现。任何线索?我想让每个函数调用一个消息[Class method]在调试器区域打印。像这样

[UIApplication sharedApplication] 
[UIApplication _isClassic] 
[NSCFString getCString:maxLength:encoding:] 
[UIApplication class] 
[SLSMoleculeAppDelegate isSubclassOfClass:] 
[SLSMoleculeAppDelegate initialize] 

回答

3

如果前缀“EXPR - ”它的工作原理与LLDB在断点设置调试命令:

expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8)) 

的解决方案是不完美但是,因为调试器打印出“无结果”每次输出后:

[OS_xpc_dictionary, _xref_dispose] 
<no result> 
[NSObject, initialize] 
<no result> 
[OS_object, initialize] 
<no result> 

我没有发现任何可禁止‘无结果’输出,这可能是因为它是不可能的,看到this Open Radar

+0

它看起来像肖恩·卡拉南评估返回void表达式时一两个月前固定在LLDB来源“无结果”输出 - 虽然这种变化还没有被包含在Xcode的释放呢。诉http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20120806/006287.html –

+0

@JasonMolenda:谢谢你的信息。我刚刚用LLDB-167.4进行了测试,它是当前Xcode 4.5.1的一部分,并且“无结果”仍在打印。 –

+0

是的,他的签入比这个版本更新; lldb-168和更高版本应该有这个变化。 –

相关问题