2013-11-23 1 views
1

현재 많은 하위 프로세스가 생성 된 C에서 명령 줄 앱을 만들고 있습니다. 그래서이 자식 코드를 디버깅해야합니다. 다음과 같이 Xcode에서 하위 프로세스를 만들었습니다. (브레이크 포인트 및 실행 커서를 참조하십시오.)명령 줄 응용 프로그램 : 하위 프로세스를 xcode 디버거에 연결하는 방법?

enter image description here

일부 문을 실행 한 후, 나는에 아래 그림과 같이 엑스 코드는 엑스 코드 디버거 (885) GBN을 첨부 할 수.

enter image description hereenter image description here

이 작동하지 않습니다. xcode 디버거에 하위 프로세스를 어떻게 첨부 할 수 있습니까? 미리 감사드립니다.

답변

3

Google 및 Apple 개발자 페이지는 실제로이 문제에 대해 침묵하고 있으며 마침내 좋은 해결 방법을 발견했습니다. 이 오류 메시지는 디버깅중인 프로세스의 자식 프로세스이거나 Xcode 디버거, gdb 또는 lldb에서 이미 디버깅중인 프로세스 인 프로세스에 Xcode 디버거를 연결할 때 나타납니다. 이 자극적 메시지를 피하기 위해

error message

먼저 자식 프로세스를 중지 할 kill(0, SIGSTOP) 문을 넣어. 다음 그림에서는 자식을 만든 직후 kill 문을 넣었습니다.

enter image description here

둘째, -g 옵션을 사용하여 소스 코드를 컴파일 할 gcc를 사용합니다.

$ ls 
GBN.1 gbn.c gbn.h type.h util.c util.h 
$ gcc *.c -g 
$ ./a.out 

[1]+ Stopped     ./a.out 
$ ps -ef | grep a.out 
    501 628 600 0 9:33AM ttys000 0:00.00 ./a.out 
    501 629 628 0 9:33AM ttys000 0:00.00 ./a.out 

우리가해야할 일은 Xcode 디버거가 pid로 프로세스에 연결하도록 지시하는 것입니다. Debug 메뉴를 클릭 한 다음 Attach to process 옵션을 찾아 By Process Identifier (PID) or name 옵션을 클릭하십시오. 그런 다음 하위 프로세스 (또는 상위 프로세스)의 PID를 입력하고 [첨부] 버튼을 누릅니다.

enter image description here

은 디버깅을 즐기십시오!

enter image description here

+0

멋진. 나는 결코 자신을 알아 내지 못했을 것이다. – saulspatz

+1

이것을 "좋은"해결 방법이라고 부르는 것은 "좋은"정의를 realllyly 늘리는 것입니다. 우리는 Swift에서 작성된 다소 큰 서비스를 가지고 있는데, 외부 종속성을 가지고 있습니다. 단지'fork()'만의 2-C 파일 데모 프로그램이 아닙니다. SIGSTOP을 debuggee에 넣는 것은 완전한 비 시동기는 아니지만 우리가 배송 코드를 디버깅하려고 할 때 정말 고통 스럽습니다. 또한, 이것은 부모가 준비되기 전에 아이가 무언가를하는 경합 조건 때문에 충돌을 디버그하는 데 도움이되지 않습니다. 아이가 다시 시작할 때까지 경주는 끝났을 때까지 오래있을 것입니다. – CBHacking

관련 문제