美文网首页
iOS调试 - NSLog

iOS调试 - NSLog

作者: lionsom_lin | 来源:发表于2018-01-31 17:56 被阅读127次

情况一:优化NSLog

#define NSLog(format, ...) do {                                             \
fprintf(stderr, " %s\n",                                           \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],  \
__LINE__, __func__);                                                        \
(NSLog)((format), ##__VA_ARGS__);                                           \
fprintf(stderr, "-------\n");                                               \
} while (0)

情况二:release版本中应该要去掉NSLog。

#ifndef __OPTIMIZE__
// 这里执行的是debug模式下 
#define NSLog(...) NSLog(__VA_ARGS__)
#else
//这里执行的是release模式下 
#define NSLog(...) {}
#endif
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif

情况三:一个项目多人开发,每个模块都有Log,屏蔽别人的log显示自己的log。

LXLog.h

#import <Foundation/Foundation.h>

typedef enum _LogOwner
{
    Log_All     =0,
    Log_LW      =1,
    Log_SYX     =2,
    Log_Andrew  =3,
}LogOwner;


#ifndef __OPTIMIZE__
// 这里执行的是debug模式下
#define CTLogBase(owner,onwer_type,fmt,...) if ([[LXLog defaultCTLog].owners containsObject:[NSNumber numberWithInteger:Log_All]] || [[LXLog defaultCTLog].owners containsObject:[NSNumber numberWithInteger:onwer_type]])\
{\
    NSLog((@"[owner: %@] %s [line: %d] " fmt),owner ,__FUNCTION__ ,__LINE__, ##__VA_ARGS__);\
}
#else
// 这里执行的是release模式下
#define CTLogBase(owner,onwer_type,fmt,...)
#endif

// NSLog((@"[文件名:%s]" "[函数名:%s]" "[行号:%d]" format), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#define LWLog(fmt,...) CTLogBase(@"LW",Log_LW,fmt,##__VA_ARGS__)
#define SYXLog(fmt,...) CTLogBase(@"SYX",Log_SYX,fmt,##__VA_ARGS__)
#define AZLog(fmt,...) CTLogBase(@"Andrew",Log_Andrew,fmt,##__VA_ARGS__)


/**
 *  调试辅助类
 */
@interface LXLog : NSObject

@property (nonatomic,strong)NSMutableArray *owners;

+(instancetype)defaultCTLog;

/** 只显示该开发者的调试日志 */
-(void)setLogOwner:(LogOwner)owner;

@end

LXLog.m

#import "LXLog.h"

@implementation LXLog

+(instancetype)defaultCTLog
{
    static LXLog *ctlog=nil;
    static dispatch_once_t once_log;
    dispatch_once(&once_log, ^{
        ctlog=[LXLog new];
        [ctlog InitArray];
    });
    return ctlog;
}

-(void)InitArray
{
    _owners = [NSMutableArray array];
    [_owners addObject:[NSNumber numberWithInteger:Log_All]];
}

/** 只显示该开发者的调试日志 */
-(void)setLogOwner:(LogOwner)owner
{
    [_owners removeAllObjects];
    [_owners addObject:[NSNumber numberWithInteger:owner]];
}

@end

调用

    // 启动调试日志
    [LXLog defaultCTLog];
    
    // 只显示该开发者的调试日志
    [[LXLog defaultCTLog] setLogOwner:Log_All];

    LWLog(@"AA");
    SYXLog(@"BB");
    AZLog(@"DD");

相关文章

  • iOS 调试

    iOS调试 - NSLog iOS调试 - 断点 iOS调试 - LLDB iOS调试 - EXC_BAD_ACC...

  • Xcode控制台真机调试没有输出信息

    iOS10真机调试的话,会屏蔽掉NSLog

  • iOS调试 - NSLog

    NSLog效率低下的原因及尝试lldb断点打印Log 宏定义的黑魔法 - 宏菜鸟起飞手册 NSLog 的优化 情况...

  • IOS开发中 NSLog的处理

    NSLog 函数打印信息是 IOS 开发中最简单的代码调试方法,但是 NSLog 本身的性能很差,程序发布后,不应...

  • LLDB调试器

    前言 在iOS开发中经常使用NSLog进行打印调试,简单方便。NSLog每次调用会打印大量的信息,时间、名称、进程...

  • LLDB调试器

    前言 在iOS开发中经常使用NSLog进行打印调试,简单方便。NSLog每次调用会打印大量信息,时间、名称、进程等...

  • IOS中替换nslog

    NSLog函数打印信息是IOS开发中最简单的代码调试方法,但是NSLog本身的性能很差,程序发布后,不应该保留这些...

  • IOS NSLog宏定义

    IOS NSLog宏定义 标签(空格分隔): IOS IOS NSLog宏定义 宏定义NSLog方法,不用加";"...

  • iOS - NSLog打印(精准打印)

    常用的NSLog的语句 在iOS开发过程中,调试是很重要的过程,而除了各种断点调试(普通断点、条件断点、全局断点)...

  • iOS宏关闭NSLog输出

    Release版本关闭Log输出 输出更详细的调试信息 参考文章:iOS开发-使用宏自定义输出(NSLog)

网友评论

      本文标题:iOS调试 - NSLog

      本文链接:https://www.haomeiwen.com/subject/kmrczxtx.html