2011-04-30 7 views
1

GDB를 사용하여 프로그램에 연결하는 NSTask를 만들려고하지만 프로그램을 시작한 후에 프로그램이 멈 춥니 다. 가능한가요?gdb에 대한 NSTask 만들기

NSTask *task = [NSTask new]; 
[task setLaunchPath:@"/usr/bin/gdb"]; 
NSArray *args = [NSArray arrayWithObjects:@"TestApp.app", nil]; 
[task setArguments:args]; 
[task launch]; 
NSLog(@"Launched."); 

NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile]; 
NSLog(@"Read data."); 

내가 확신 "TestApp.app"나는 "그런 파일 또는 디렉터리"에러가 발생하지 않기 때문에 올바른 위치에 있습니다 여기에 내가 사용하고 코드입니다. 콘솔은 "Launched"만 인쇄합니다. 그리고 회전하는 비치볼은 내가 뛰기를 죽일 때까지 1 분 넘게 계속됩니다. 이 아이디어를 만들 수있는 아이디어가 있습니까?

+0

언제 TestApp이 종료됩니까? – justin

+0

코코아 개발자 센터 (Cocoa Dev Central)에 대한 다음 글을 읽어 보시길 바랍니다 : [UNIX 명령어 배치] (http://cocoadevcentral.com/articles/000025.php)와 [UNIX 명령어 파트 II 배치] (http://cocoadevcentral.com/ articles/000031.php). –

+0

gdb NSTask 명령을 실행 한 직후에 분리합니까, 아니면 터미널과 같이 영구 세션을 생성합니까? –

답변

1

몇 가지 고려해야 할

  • 그것은 set a pipe for standard input에 현명. 몇 가지 상황이 있는데, 특히 NSLog()이 호출되면 결국 NSTask이 걸립니다.

  • -readDataToEndOfFile을 표준 출력 핸들에 보내면 작업 실행이 끝날 때까지 스레드가 일시 중지됩니다. 이는 코드가 주 스레드에서 실행되고있는 경우 특히 나빠집니다. 사용자 인터페이스를 변경하거나 응용 프로그램 이벤트를 처리하지 않아 응용 프로그램을 계속 실행할 가능성이 높습니다. 대신 …inBackground… 메쏘드를 사용하십시오.

  • 표준 입력에 데이터를 전송하지 않습니다. gdb은 입력을받지 못하면 명령을받을 때까지 무기한 대기합니다.

관련 문제