Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
937 views
in Technique[技术] by (71.8m points)

ios - lldb Xcode: error: 'printf' is not a valid command

I am using Xcode 4.3.3 and I want to set symbolic endpoints. I created a symbolic breakpoint for all objc_msgSend symbols and I wanted to combine it with a "Debugger output".

I followed the tips of this post in SO. However in my debugger the message

error: 'printf' is not a valid command.

appears. Any clue? I want for every function call a message [Class method] to be printed in the debugger area. Like this

[UIApplication sharedApplication]
[UIApplication _isClassic]
[NSCFString getCString:maxLength:encoding:]
[UIApplication class]
[SLSMoleculeAppDelegate isSubclassOfClass:]
[SLSMoleculeAppDelegate initialize]
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It works with lldb if you prefix "expr --" to the debugger command in the breakpoint settings:

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

The solution is not perfect however, because the debugger prints "no result" after each output:

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

I have found nothing to suppress the "no result" output, it may be that it is not possible, see this Open Radar.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...