Google 및 Apple 개발자 페이지는 실제로이 문제에 대해 침묵하고 있으며 마침내 좋은 해결 방법을 발견했습니다. 이 오류 메시지는 디버깅중인 프로세스의 자식 프로세스이거나 Xcode 디버거, gdb 또는 lldb에서 이미 디버깅중인 프로세스 인 프로세스에 Xcode 디버거를 연결할 때 나타납니다. 이 자극적 메시지를 피하기 위해
먼저 자식 프로세스를 중지 할 kill(0, SIGSTOP)
문을 넣어. 다음 그림에서는 자식을 만든 직후 kill
문을 넣었습니다.
둘째, -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를 입력하고 [첨부] 버튼을 누릅니다.
은 디버깅을 즐기십시오!
멋진. 나는 결코 자신을 알아 내지 못했을 것이다. – saulspatz
이것을 "좋은"해결 방법이라고 부르는 것은 "좋은"정의를 realllyly 늘리는 것입니다. 우리는 Swift에서 작성된 다소 큰 서비스를 가지고 있는데, 외부 종속성을 가지고 있습니다. 단지'fork()'만의 2-C 파일 데모 프로그램이 아닙니다. SIGSTOP을 debuggee에 넣는 것은 완전한 비 시동기는 아니지만 우리가 배송 코드를 디버깅하려고 할 때 정말 고통 스럽습니다. 또한, 이것은 부모가 준비되기 전에 아이가 무언가를하는 경합 조건 때문에 충돌을 디버그하는 데 도움이되지 않습니다. 아이가 다시 시작할 때까지 경주는 끝났을 때까지 오래있을 것입니다. – CBHacking