Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否有一种方法可以查看每次调用NSLog的时间以及NSLog的内容?_Ios_Objective C - Fatal编程技术网

Ios 是否有一种方法可以查看每次调用NSLog的时间以及NSLog的内容?

Ios 是否有一种方法可以查看每次调用NSLog的时间以及NSLog的内容?,ios,objective-c,Ios,Objective C,理想情况下,我希望设置一个选择器,以便每次在我的应用程序中调用NSLog时都能看到它,并获取该NSLog的输出。NSLog可能由我正在使用的SDK调用,我希望能够在我的应用程序中看到这些日志的输出。这可能吗?您需要的是一个符号断点 导航到Xcode中的断点选项卡,并使用左下角的+按钮添加断点 添加断点后,它会自动弹出一个窗口,允许您输入要暂停执行的条件。您可以使用NSLog作为符号 至于调用您自己的自定义函数,您可以尝试通过在该断点中添加操作来实现,并利用调试器的功能,通过传入调试器可用的参数(

理想情况下,我希望设置一个选择器,以便每次在我的应用程序中调用NSLog时都能看到它,并获取该NSLog的输出。NSLog可能由我正在使用的SDK调用,我希望能够在我的应用程序中看到这些日志的输出。这可能吗?

您需要的是一个符号断点

导航到Xcode中的断点选项卡,并使用左下角的
+
按钮添加断点

添加断点后,它会自动弹出一个窗口,允许您输入要暂停执行的条件。您可以使用
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;
}
我的示例使用2
va_list
s使用NSLog(如
NSLogv
vfprintf
记录到打开的文件*流(在本例中为stderr)。。。您还可以更简单地格式化NSString(因为vfprintf无法打印NS对象)

我试着用dlsym重新分配NSLog,这将是进程范围的,而不仅仅是在宏展开时。。。我不能让它工作,但我不是一个动态链接专家