MobileSafari에서 특정 작업을 수행하는 데 필요한 기능을 호출하기 위해 Mobilesubstrate tweak을 작성했습니다. 나는이 팅겨을 작성 NSLog 출력을 리디렉션하고 다음과 같은 메시지가 많은 보았다NSLog 한계를 초과하여 회피, 확장 또는 캡처하는 방법
내가 대신 NSLog의 자신의 로그 파일에 의해 사용process 778 exceeded 500 log message per second limit - remaining messages this second discarded
가 MobileSafari가 시작하는 시간이 오래 걸렸다 살해되었다. 함수를 연결하고 해당 함수 인수 (C 기반 함수에 대해 로깅) 및 시간/데이터를 기록 할 수 있습니까? ASL 라이브러리와 같은 사용 가능한 메소드를 사용하여 iPhone (jailbroken)에서 사용자 정의 로깅 기능을 사용할 수 있습니까?
EDIT : NSOperationQueue, NSOperation이라는 LoggingOperation을 만들고 Tweak.xm 파일에 바로 포함 시켜서이 문제를 해결하려고했습니다. 나는 이것이 UI를 업데이트하고 MobileSafari의 출시를 완료하기위한 주요 스레드를 안심시킬 수 있다고 생각합니다. 팅겨 컴파일 할 수 있지만 함수가 충돌 할 때, LoggingOperation 빈 로그 파일에 결과 파일에 작성하지 않은 :
//LoggingOperation.h
@interface LoggingOperation : NSOperation {
NSString *event;
}
@property(retain) NSString *Event;
- (id)initWithEvent:(NSString*)ev;
@end
NSOperation 구현 내부 :
//LoggingOperation.m
@implementation LoggingOperation
@synthesize Event;
- (id)initWithEvent:(NSString*)ev;
{
if (![super init]) return nil;
[self setEvent:ev];
return self;
}
- (void)dealloc {
[Event release], Event = nil;
[super dealloc];
}
- (void)main {
NSString *serverError = event;
if (![[NSFileManager defaultManager] fileExistsAtPath:@"/var/mobile/mylog.log"])
{
NSString *statusFileName = [NSString stringWithFormat:@"/var/mobile/mylog.log"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:statusFileName contents:nil attributes:nil];
}
serverError = [serverError stringByAppendingString:@"\n"];
NSString *serverFile = [NSString stringWithFormat:@"/var/mobile/mylog.log"];
NSData *serverText= [serverError dataUsingEncoding:NSUTF8StringEncoding];
NSFileHandle *serverFileHandle = [NSFileHandle fileHandleForUpdatingAtPath:serverFile];
if (serverFileHandle)
{
[serverFileHandle seekToEndOfFile];
// this NSLog output appears in syslog but serverText is not written to mylog
NSLog(@"WRITING TO THE LOG FILE!");
[serverFileHandle writeData:serverText];
[serverFileHandle closeFile];
}
}
@end
나는 또한 편의를 생성
,745 : 방법 후크 자체에서void mylog(NSString* serverError)
{
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
LoggingOperation *op = [[LoggingOperation alloc] initWithEvent:serverError];
[queue addOperation:op];
[op release];
}
각 후크 방법 방법은 로그를 생성하도록 호출
CGRect replaced_CGRectIntegral (CGRect rect)
{
mylog(@"CGRectIntegral(rect)");
return o_CGRectIntegral(rect);
}
NSOperation에서 파일에 쓰고 파일이 비어있는 이유는 무엇입니까?
버퍼링, 메시지 대기열 및 작업자 스레드의 저장소에 대한 오프로드 쓰기 (비싼)를 사용하기 위해 자체 로깅 라이브러리를 최적화 할 수 있습니다. –
ok guys, 큰 상처가 나더라도, 인터페이스에서 잘못된 이벤트 인 '이벤트'가 발견되었습니다. 'Event'로 변경하면 이제는 내 로그 파일에 성공적으로 쓸 수 있습니다. – gigasai
아니요 .. MobileSafari는 여전히 시간 내에 응답 할 수 없습니다. 드로잉 보드로 돌아갑니다. – gigasai