文章目录

  • 前言

  • I 、 DEBUG 宏的应用

  •  

    • 1.1 发布模式关闭NSLog

  • II、 NSLog调试技巧

  •  

    • 2.1 Where to find NSLog's output

    • 2.2 Improved logging in Objective-C

    • 2.1 Objective-C's boxing capability (`装箱`快速构造数字对象)

    • 2.2 知识补充:装箱和拆箱

  • see also

  •  

    • Log facility 和level的关系

    • 常见的日志文件

    • 配置【生成/存储日志】策略: `vim /etc/rsyslog.conf`

    • 配置IP

    •  

 

 

 

前言

 

 

今天周末时间关系,此文只完成了部分内容,后续完整内容请移步到博客(kunnan.blog.csdn.net)

  • 本文demo(请到博客看链接:kunnan.blog.csdn.net)

I 、 DEBUG 宏的应用
  • 应用场景:区分调试模式和发布模式进行特殊处理

  • 自定义preprocessor macro:

The DEBUG preprocessor macro setting in an Xcode project
Basic debugging using logging for iOS apps_java

1.1 发布模式关闭NSLog

//调试模式
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define KisDebug 1

//#define NSLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

#else//发布模式
#define NSLog(...)
#define KisDebug 0
#endif

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

II、 NSLog调试技巧

2.1 Where to find NSLog’s output

NSLog outputs messages to the Apple System Log facility or to the Console app

Basic debugging using logging for iOS apps_java_02

2.2 Improved logging in Objective-C

  • Improved logging in Objective-C

格式说明符 描述
func %s 当前函数签名
LINE %d 在源代码文件的当前行号
FILE %s 源代码文件的完整路径
PRETTY_FUNCTION %s print the name of the function being called
表达 格式说明符 描述
NSStringFromSelector(_cmd) %@ Name of the current selector
NSStringFromClass([self class]) %@ Name of the current object’s class
[[NSString stringWithUTF8String:FILE] lastPathComponent] %@ Name of the source code file(源代码文件的名称)
[NSThread callStackSymbols] %@ NSArray of the current stack trace as programmer
  • Format specifiers for data types

Type Format specifier Considerations
NSInteger %ld or %lx Cast the value to long.
NSUInteger %lu or %lx Cast the value to unsigned long.
CGFloat %f or %g %f works for floats and doubles when formatting; but note the technique described below for scanning.
CFIndex %ld or %lx The same as NSInteger.
pointer %p or %zx %p adds 0x to the beginning of the output. If you don’t want that, use %zx and no typecast.

2.1 Objective-C’s boxing capability (装箱快速构造数字对象)

The printf function NSLog offers a number of substitution tokens for printing numbers (%d, %ld, %f, %d, for example). As a convenience, you can use Objective-C’s boxing capability to save time and avoid compiler warnings.

  • For example

Basic debugging using logging for iOS apps_java_02

平常也可以使用@ 来快速包装数字类型以对象的形式进行存储和传参

Basic debugging using logging for iOS apps_java_02

    [discountArray addObject:[[ self class] mj_objectWithKeyValues:@{@"placeholder":QCTLocal(@"please_input_card_num"),@"btnContent":QCTLocal(@"member_see"),@"EnterModelType":@2,@"isEnabled":@1,@"isLast":@1,@"block":block}]];

  • 1

  • 2

2.2 知识补充:装箱和拆箱

  • Java包装类(装箱和拆箱)

全部被final修饰,顺便提一下,java.lang.Math,System,String也被final修饰
包装类是使用面向对象的思想把简单的数据类型封装成类。
1.特点
包装类把简单的数据类型包装成类。
注:简单数据类型不是类,使用简单数据类型主要为了提高代码的运行效率
2.装箱和拆箱
把简单数据类型包装成对应的包装类称为boxing(示例:Integer i=1;将1包装成Integer再使用Object引用Integer对象)
把包装类型转换成简单数据类型称为unboxing(示例:Integer i=1,int p=i;//将包装类Integer转化成简单数据类型int)
注:Integer的拆箱方法为 int intValue(),其他的包装类以此类推
1)包装类都重写了toString方法,equals方法,hashCode方法
2)Integer的API:
String toBinaryString(int i); 将int类型的数据以二进制字符串形式返回
int parseInt(String) 将字符串转化成int类型
int parseInt(Stringstr,int i ) 将字符串转化成对应的进制 类型,str为被转换的字符串,i为进制类型(10,8,16)
Integer valueof(String str) 将字符串转换成Integer类型。

see also
  • String Format Specifiers

Specifier Description
%@ Objective-C object, printed as the string returned by descriptionWithLocale: if available, or descriptionotherwise. Also works with CFTypeRef objects, returning the result of the CFCopyDescription function.
%% '%' character.
%d%D Signed 32-bit integer (int).
%u%U Unsigned 32-bit integer (unsigned int).
%x Unsigned 32-bit integer (unsigned int), printed in hexadecimal using the digits 0–9 and lowercase a–f.
%X Unsigned 32-bit integer (unsigned int), printed in hexadecimal using the digits 0–9 and uppercase A–F.
%o%O Unsigned 32-bit integer (unsigned int), printed in octal.
%f 64-bit floating-point number (double).
%e 64-bit floating-point number (double), printed in scientific notation using a lowercase e to introduce the exponent.
%E 64-bit floating-point number (double), printed in scientific notation using an uppercase E to introduce the exponent.
%g 64-bit floating-point number (double), printed in the style of %e if the exponent is less than –4 or greater than or equal to the precision, in the style of %f otherwise.
%G 64-bit floating-point number (double), printed in the style of %E if the exponent is less than –4 or greater than or equal to the precision, in the style of %f otherwise.
%c 8-bit unsigned character (unsigned char).
%C 16-bit UTF-16 code unit (unichar).
%s Null-terminated array of 8-bit unsigned characters. Because the %s specifier causes the characters to be interpreted in the system default encoding, the results can be variable, especially with right-to-left languages. For example, with RTL, %s inserts direction markers when the characters are not strongly directional. For this reason, it’s best to avoid %s and specify encodings explicitly.
%S Null-terminated array of 16-bit UTF-16 code units.
%p Void pointer (void *), printed in hexadecimal with the digits 0–9 and lowercase a–f, with a leading 0x.
%a 64-bit floating-point number (double), printed in scientific notation with a leading 0x and one hexadecimal digit before the decimal point using a lowercase p to introduce the exponent.
%A 64-bit floating-point number (double), printed in scientific notation with a leading 0X and one hexadecimal digit before the decimal point using a uppercase P to introduce the exponent.
%F 64-bit floating-point number (double), printed in decimal notation.
  • Format specifiers for data types

Type Format specifier Considerations
NSInteger %ld or %lx Cast the value to long.
NSUInteger %lu or %lx Cast the value to unsigned long.
CGFloat %f or %g %f works for floats and doubles when formatting; but note the technique described below for scanning.
CFIndex %ld or %lx The same as NSInteger.
pointer %p or %zx %p adds 0x to the beginning of the output. If you don’t want that, use %zx and no typecast.
  • Basic debugging

Log facility 和level的关系

NSLog outputs messages to the Apple System Log facility or to the Console app
Basic debugging using logging for iOS apps_java_05

  • facility:是系统对某种类型事件的定义。

LOG_AUTH
LOG_AUTHPRIV 安全认证
LOG_CRON clock daemon (cron and at) 计划任务事件
LOG_DAEMON 后台进程
LOG_FTP ftp daemon
LOG_KERN kernel messages
LOG_LOCAL0 through LOG_LOCAL7 用户自定义设备
LOG_LPR printer subsystem
LOG_MAIL 邮件系统mail subsystem
LOG_NEWS news subsystem
LOG_SYSLOG syslogd自身产生的日志
LOG_USER (default)

  • level :指遇到何种情况才记录日志

从下到上,级别从低到高,记录的信息越来越少

LOG_EMERG 紧急,致命,服务无法继续运行,如配置文件丢失
LOG_ALERT 报警,需要立即处理,如磁盘空使用95%
LOG_CRIT 致命行为
LOG_ERR 错误行为
LOG_WARNING 警告信息
LOG_NOTICE 普通,重要的标准信息
LOG_INFO 标准信息
LOG_DEBUG 调试信息,排错所需,一般不建议使用

常见的日志文件

tail /var/log/messages //系统主日志文件
tail -20 /var/log/messages
tail -f /var/log/messages //动态查看日志文件的尾部
tailf /var/log/secure //认证、安全
tail /var/log/maillog //跟邮件postfix相关
tail /var/log/cron //crond、at进程产生的日志
tail /var/log/dmesg //和系统启动相关
tail /var/log/audit/audit.log //系统审计日志
tail /var/log/yum.log //yum
tail /var/log/mysqld.log //MySQL
tail /var/log/xferlog //和访问FTP服务器相关
w //当前登录的用户 /var/log/wtmp
last //最近登录的用户 /var/log/btmp
lastlog //所有用户的登录情况 /var/log/lastlog

配置【生成/存储日志】策略: vim /etc/rsyslog.conf

由设备+级别+存放位置组成

FACILITY+LEVEL+FILE组成:
authpriv.* /var/log/secure(SSH信息)
mail.* -/var/log/maillog(发邮件)
cron.* /var/log/cron(创建任务)
authpriv.* * <代表所有终端>
authpriv.
 @192.168.10.230 
authpriv.* @@192.168.10.230 

配置IP

  • /etc/sysconfig/network-scripts/ifcfg-enp2s0中各个参数的意义

vim /etc/sysconfig/network-scripts/ifcfg-enp2s0
NAME=“enp2s0”
DEVICE=“enp2s0”
ONBOOT=yes //是否启用该设备
BOOTPROTO=none //手动(none/static)还是自动(dhcp)
IPADDR=172.16.120.246 //地址
PREFIX=24 //掩码
IPADDR1=192.168.200.246 //额外地址
PREFIX1=24 //额外掩码,注意编号
GATEWAY=172.16.120.254 //网关
DNS1=8.8.8.8 //DNS
DNS2=114.114.114.114 //DNS2

https://mp.weixin.qq.com/s/iMqxSAWKbyBCLCZnAFM7PA