Ios 是否有一种方法可以查看每次调用NSLog的时间以及NSLog的内容?
理想情况下,我希望设置一个选择器,以便每次在我的应用程序中调用NSLog时都能看到它,并获取该NSLog的输出。NSLog可能由我正在使用的SDK调用,我希望能够在我的应用程序中看到这些日志的输出。这可能吗?您需要的是一个符号断点 导航到Xcode中的断点选项卡,并使用左下角的Ios 是否有一种方法可以查看每次调用NSLog的时间以及NSLog的内容?,ios,objective-c,Ios,Objective C,理想情况下,我希望设置一个选择器,以便每次在我的应用程序中调用NSLog时都能看到它,并获取该NSLog的输出。NSLog可能由我正在使用的SDK调用,我希望能够在我的应用程序中看到这些日志的输出。这可能吗?您需要的是一个符号断点 导航到Xcode中的断点选项卡,并使用左下角的+按钮添加断点 添加断点后,它会自动弹出一个窗口,允许您输入要暂停执行的条件。您可以使用NSLog作为符号 至于调用您自己的自定义函数,您可以尝试通过在该断点中添加操作来实现,并利用调试器的功能,通过传入调试器可用的参数(
+
按钮添加断点
添加断点后,它会自动弹出一个窗口,允许您输入要暂停执行的条件。您可以使用NSLog
作为符号
至于调用您自己的自定义函数,您可以尝试通过在该断点中添加操作来实现,并利用调试器的功能,通过传入调试器可用的参数(例如,$arg1
)来调用您自己的代码
所以我认为不可能简单地用其他东西替换NSLog的每个实例。。。但你可以这样做:
#define NSLog MyLog
void MyLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
void MyLog(NSString *format, ...)
{
va_list list;
va_start(list,format);
NSLogv(format,list);
va_end(list);
va_start(list,format);
vfprintf(stderr,[format UTF8String], list);
va_end(list);
}
int main(int argc, const char * argv[]) {
NSLog(@"hello %s\n","world");
return 0;
}
我的示例使用2va_list
s使用NSLog(如NSLogv
和vfprintf
记录到打开的文件*流(在本例中为stderr)。。。您还可以更简单地格式化NSString(因为vfprintf无法打印NS对象)
我试着用dlsym重新分配NSLog,这将是进程范围的,而不仅仅是在宏展开时。。。我不能让它工作,但我不是一个动态链接专家