NSLog 로그 출력 불완전 문제 분석 및 솔루션
12994 단어 저널
NSLog(@"3 :%@", data);
, 이 코드를 어떻게 보든 아무런 문제가 없습니다. 인쇄 NSLog(@"data.length:%d", data.length);
에서 나온 이 문자열의 길이는 비교적 깁니다: data.length:7353
.나는 시스템의 이 인쇄 함수가 메모리 제한이 있다고 의심했다. 그것의 길이를 초과하면 바로 뒤의 문자를 잘라 버렸다.최대 길이의 문자열을 지원할 수 있는지 분석합니다. [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3130303030393539" }, { "openType" : "03", "ope
실제 빈칸 한자를 포함하는 문자는 1021개입니다.설마 그것은 정말 이 정도의 문자열만 인쇄할 수 있는 것입니까?이 문자열을 직접 인쇄합니다: NSLog(@"%@", data);
.그 결과 이 7353개의 문자를 직접 인쇄해 냈다.이 1021개의 한자와 문자만 인쇄하는 것이 아니라 많이 인쇄할 수 있을 것 같다.조립과 동시에 인쇄를 하기 때문에 이런 제한이 있는 것일까. 나는 이런 상황을 테스트했다. NSLog(@"testdata%@", data);
결과적으로 이 7353개의 문자를 모두 인쇄할 수 있었다.추측이 완전히 옳지 않다는 것을 알 수 있다.그런 다음 문자열을 외부에서 결합하여 직접 인쇄해 보겠습니다. str = [NSString stringWithFormat:@" %@", data];
NSLog(@"%@", str);
결과와 안 됨도 이 7353개의 문자를 모두 인쇄해라.추측이 완전히 옳지 않다는 것을 알 수 있다.그들에 비해 규칙을 발견했다. 인쇄는 연결 문자열이고 그 안의 상수 문자열에 중국어가 있어야 인쇄된 문자열이 매우 짧고 가장 큰 길이를 초과한 문자열 뒷부분은 버려진다.그렇다면 찾은 문제점은 이 최대 길이가 얼마나 되는지 연구해 볼까요?인쇄된 가장 큰 문자열은 최대 1021개의 문자로 한자를 포함하고 있으며 1021개의 문자와 관련이 있을 가능성이 높기 때문에 문자열을 캡처 테스트합니다.테스트 결과: 중국어 상수의 경우 1020 문자의 문자열과 연결하는 데 문제가 없지만 1021 문자의 문자열과 연결하면 마지막 문자가 출력되지 않습니다.총괄: 긴 문자열을 직접 인쇄할 때 슈퍼 길이가 아니면 보통 문제가 없다.출력 정보를 추가하고 중국어를 상수로 사용할 때 변수 문자열과 연결할 때, 그들의 문자 수와 1021을 초과할 때, 뒤의 문자열은 출력되지 않는다. (테스트의 장면은 중국어 문자와 비한자 json 문자열이 포함되지 않는다. 만약 중국어가 많으면, 그들의 총계가 1021인지 여부는 더 이상 연구하지 않았다.)NSLog을 효과적으로 재설정하는 방법을 개발할 수 있습니다. 이 시나리오는 기존 Mac의 콘솔 인쇄 함수가 아니라 LINux 운영체제 로그 함수로 원래의 함수를 바꾸었습니다.
#ifndef __OPTIMIZE__
// debug , ,
#define NSLog(...) printf("%s %s %d : %s
",__TIME__, __PRETTY_FUNCTION__ ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);
#else
// release ,
#define NSLog(...)
#endif
추천 솔루션: 인쇄할 모든 문자열을 하나의 문자열로 연결한 다음 한 번에 인쇄합니다.
해결 방안: 인쇄할 모든 문자열을 하나의 문자열로 연결한 다음 한 번에 인쇄합니다.NSLog 직접 재설정:
#define NSLog(format, ...) printf("TIME:%s FILE:%s(%d ) FUNCTION:%s
%s
",__TIME__, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String])
권장하지 않습니다.테스트 코드: NSLog(@"data.length:%d", data.length);
NSString *str = [NSString stringWithFormat:@"%@", [data substringToIndex:1022]];
NSLog(@" %@", str);
NSLog(@"str.length:%d", str.length);
str = [NSString stringWithFormat:@"%@", [data substringToIndex:1021]];
NSLog(@" %@", str);
str = [NSString stringWithFormat:@" %@", [data substringToIndex:1021]];
NSLog(@"%@", str);
NSLog(@"str.length:%d", str.length);
str = [NSString stringWithFormat:@"%@", [data substringToIndex:1020]];
NSLog(@" %@", str);
str = [NSString stringWithFormat:@" %@", [data substringToIndex:1020]];
NSLog(@"%@", str);
NSLog(@"str.length:%d", str.length);
// str = [NSString stringWithFormat:@"3 :data:%@", data];
NSLog(@"3 :%@", data);
인쇄된 로그는 다음과 같이 분석할 수 있습니다.
2019-08-02 16:11:54.297359+0800 ELock[1447:400407] data.length:7353
2019-08-02 16:11:54.297597+0800 ELock[1447:400407] [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3130303030393539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3130303030393539" }, { "openType" : "03", "ope
2019-08-02 16:11:54.461804+0800 ELock[1447:400407] str.length:1022
2019-08-02 16:11:54.461982+0800 ELock[1447:400407] [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3420303038763539" }, { "openType" : "03", "ope
2019-08-02 16:11:54.473584+0800 ELock[1447:400407] [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3420303038763539" }, { "openType" : "03", "open
2019-08-02 16:11:54.475564+0800 ELock[1447:400407] str.length:1022
2019-08-02 16:11:54.475860+0800 ELock[1447:400407] [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3420303038763539" }, { "openType" : "03", "ope
2019-08-02 16:11:54.477939+0800 ELock[1447:400407] [ { "openType" : "03", "openTime" : "1564651163", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651170", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651176", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651182", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651188", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651194", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651200", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651206", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651212", "uid" : "3420303038763539" }, { "openType" : "03", "openTime" : "1564651218", "uid" : "3420303038763539" }, { "openType" : "03", "ope
2019-08-02 16:11:54.480312+0800 ELock[1447:400407] str.length:1021
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
실습(KLab Server Side Camp#2)에 사용된 환경 구성법을 조사해 보십시오.이때 환경 구축은 모두 Giithub의 Codespaces에서 이루어졌기 때문에 매우 참고 가치가 있습니다. 봄방학 중 근무일인 5일,게으른 대학생, 고등학생도 쉽게 참가할 수 있기 때문에 쉽게 배정할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.