博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次iOS闪退问题的定位:NSLog闪退
阅读量:1984 次
发布时间:2019-04-27

本文共 2234 字,大约阅读时间需要 7 分钟。

问题定位

记一次iOS闪退问题的定位,同事接了极光SDK,调用setAlias接口的时候闪退了,通过爱思助手拿到日志如下

Jul 17 10:17:48 iPhone12 inhouse[7514] 
: [Bugly] Fatal signal(11) raised.Jul 17 10:17:48 iPhone12 inhouse[7514]
: [Bugly] Trapped fatal signal 'SIGSEGV(11)' ( "0 libobjc.A.dylib 0x0000000198bff6b0 objc_msgSend + 16", "1 libsystem_trace.dylib 0x0000000199605438 0x00000001995fe000 + 29752", "2 libsystem_trace.dylib 0x00496a819960bdf4 0x00000001995fe000 + 20664771288292852", "3 libsystem_trace.dylib 0x005948819960e3f8 0x00000001995fe000 + 25130987520328696", "4 CoreFoundation 0x0054fe81999cf5dc 0x00000001998c2000 + 23923723754067420", "5 CoreFoundation 0x0040e981999cf510 _CFLogvEx3 + 18271134474567812", "6 Foundation 0x000dc7019a462f54 0x000000019a341000 + 3877977512353620", "7 Foundation 0x0065bc019a462f94 NSLog + 28635680833798184", "8 inhouse 0x003e3f8105838fc8 0x000000010454c000 + 17521267564269512", "9 inhouse 0x00000001049a6260 0x000000010454c000 + 4563552", "10 inhouse 0x0000000104<\M-b\M^@\M-&>

看崩溃日志是执行NSLog的时候出问题了。

看了下对应的Objective-C代码,如下

extern "C" void JPuishSetAlias(int sequence, const char* alias){
NSLog(@"JPuishSetAlias, alias: %@", alias); NSString *nsAlias = [NSString stringWithCString:alias encoding:NSUTF8StringEncoding]; [JPUSHService setAlias:nsAlias completion:aliasOperationCompletion seq:(NSInteger)sequence];}

问题就处在那句NSLog上,aliasconst char*数据类型,格式化必须使用 %s,不能使用%@,否则会闪退。


补充

NSLog常用的几种输出

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];//常用类型的定义int i =10;BOOL isShow=TRUE;float f = 3.1415926;char a =120;NSString *name =@"Himi";//常用打印语句NSLog(@"字符串:%@",name);NSLog(@"字符:%c",a);NSLog(@"布尔值:%i",isShow);NSLog(@"整形:%i",i);NSLog(@"单精度浮点数: %f",f);NSLog(@"精度浮点数,且只保留两位小数:%.2f",f);NSLog(@"科学技术法:%e",f);NSLog(@"科学技术法(用最简短的方式):%g",f);NSLog(@"同时打印两个整数:i=%i,f=%f",i,f);[pool drain];

%@ 对象

%d, %i 整数

%u 无符整形

%f 浮点/双字

%x, %X 二进制整数

%o 八进制整数

%zu size_t

%p 指针

%e 浮点/双字 (科学计算)

%g 浮点/双字

%s C 字符串

%.*s Pascal字符串

%c 字符

%C unichar

%lld 64位长整数(long long)

%llu 无符64位长整数

%Lf 64位双字

%e 是实数,用科学计数法计的

转载地址:http://yxzvf.baihongyu.com/

你可能感兴趣的文章
【论文阅读笔记】Convolutional Neural Networks for Sentence Classification
查看>>
【NLP学习笔记】One-hot encoding:独热编码
查看>>
【工具使用】CSDN编辑器markdown字体、颜色与字号的设置
查看>>
【NLP学习笔记】词共现矩阵
查看>>
【工具与环境】Windows下安装Sublime Text 3
查看>>
【工具与环境】Excel中批量插入行
查看>>
【学习笔记】对vanilla的一些个人理解
查看>>
“学硕” VS “专硕”
查看>>
【NLP学习笔记】知识图谱阅读笔记及其心得
查看>>
【工具使用】新版CSDN-markdown编辑器使用指南
查看>>
《知识图谱》阅读笔记(六)
查看>>
【NLP学习笔记】中文分词(Word Segmentation,WS)
查看>>
【NLP学习笔记】词性标注(Part-of-speech Tagging, POS)
查看>>
《知识图谱》阅读笔记(九)
查看>>
【超越白皮书7】你需要知道关于ETH2.0的几个事实
查看>>
AMM做市无常损失对冲分析系列(一)—— 损益及期权对冲模型构建
查看>>
【python练习题】遍历1
查看>>
对于时间复杂度的通俗理解
查看>>
如何输入多组数据并输出每组数据的和?
查看>>
基于CentOS 7的Linux常用命令行命令
查看>>