2012-04-19 73 views
3

我想从NSLogging遍地移动到使用断点记录性能影响并不排除它的地方。Xcode 4.3断点记录对象描述

我知道我可以只po调试器命令操作的对象,我知道我可以只通过choosign的日志消息行动记录任何字符串。

我认为我应该能够通过选择日志消息并输入类似SomeText giving context for object description: @(const char *)[[anObject description] UTF8String]@这样的结合。不幸的是,这似乎不起作用,并总是给我我所假设的指向描述字符串的指针。

我在做什么错?

回答

2

这有点棘手,但我认为这会奏效。设置断点动作作为调试器命令。然后使用以下文本作为动作:

po (NSString *) [@"Some text describing: " stringByAppendingString:(NSString *)[anObject description]] 

在调试器中工作时,必须非常小心地使用返回类型。 GDB和LLDB都有。

我喜欢使用断点来避免性能下降的想法,但这也意味着只有在连接到调试器时才会打印日志。而NSLogs将缓存他们的输出到系统日志,可以从Xcode中的Organizer(Devices)查看。

+0

谢谢,这听起来像一个可行的解决方案(即使它不*直接*回答记录操作发生了什么)。实际上,根据我的经验,断点记录要比使用NSLog慢很多,但有时候,我不想将NSLog全部喷到我的源代码中。 – fzwo 2012-05-03 17:46:38

+0

也许有比我能回答更多的东西?我希望你在帖子中表达的结果只是一个指针。我发布的代码是否可以帮助您实现相同的目标,并且您正在寻找不同的方式来实现它? – Sam 2012-05-03 19:09:23

+0

我已经授予您赏金,因为它解决了我用断点记录遇到的实际问题。我认为我的问题中的表达式会打印一个字符串,而不仅仅是指向字符串的指针。 – fzwo 2012-05-05 23:37:52

1

(编辑:我错过了问题的角度,它不是一个答案)

我认为这是最好使用DebugLog。这是一个,你可以很容易地禁用它(当你在调试版本中def -ine DEBUG时它是打开的,当你不是define时它是关闭的)。所以,没有性能下降(恰恰相反)。

只需更换

NSLog(@"Hello, World!"); 

DebugLog(@"Hello, World!"); 

而不是

19/4/12 8:55:52.949 PM Dictionary: Hello, World! 

您将获得:

BetterDictionary.m:737 Hello, World! 

(它显示的文件,甚至该行已登录的话)

这是无限更有趣。 undefine DEBUG为您的生产构建和DebugLog将不会被称为在所有

而且别忘了#import 'DebugLog.h'

+1

感谢您的建议,但那并不能真正回答我的问题。 – fzwo 2012-04-19 16:30:37

+4

@fzwo是的,我在提交答案后立即明白了我已经完全错过了这个问题的观点,并且即将删除它,您评论过......但我会把它留在这里,因为这可能对其他人来说可能是新的它。 – 2012-04-19 16:32:59