내가 디버깅있어 프로그램하는 반복 부모가 아이를 기다리는 waitpid()
를 호출로 자식 프로세스가 일부 위임 된 작업을 수행 fork()
을 사용하는 일반적인 절차 끝내고 계속한다. 예를 들어 :GDB : 많은 포크()의 후 자식 프로세스를 디버깅
while (!finished) {
pid_t p = fork();
if (p < 0) {
perror("fork");
exit(EXIT_FAILURE);
}
else if (p == 0) {
/* Do something. For example: */
if (/* some (rare) condition */)
raise(SIGSEGV);
exit(EXIT_SUCCESS);
}
else {
int status;
pid_t w = waitpid(p, &status, 0);
if (w < 0) {
perror("waitpid");
exit(EXIT_FAILURE);
}
/* Do something. */
}
}
나는 GDB 내에서 프로그램을 실행 좋아하고 것입니다 얼마나 많은 다른 자식 프로세스가 성공적으로 완료 상관없이 신호, 를받지과 전에 사라진 자식 프로세스를 디버깅합니다.
물론 GDB는 자식 프로세스를 조사하지 않기 때문에 set follow-fork-mode child
이 필요합니다. 그러나 이것만으로도 부모를 분리하고, GDB를 첫 번째 자식에게 인도하며, 종료시 디버깅을 마칩니다.
따라서 부모가 분리되지 않도록하려면 set detach-on-fork off
도 필요합니다. 그러나, 이것은 GDB가 멈추도록하고, 첫 번째 자식이 종료 될 때 부모가 일시 중지됨과 동시에 프롬프트를 제공합니다. inferior
을 사용하여 학부모를 선택하고 continue
을 발행 할 수 있지만, 모든 어린이에게이 작업을 수행해야합니다.. 1000 번째 자식이 신호를 받고 내가 조사하고 싶은 자식이라면이 과정을 999 번 반복해야합니다.
그래서이 방법을 자동으로 수행하여 GDB가 CPU가 수행 할 작업을 수행하도록 할 것인지 궁금합니다. 부모 → 자식 1 → 부모 → 자식 2 → ..., 멈추지 않고 나에게 자극을주지 않고 신호를받는 첫 번째 자식 N에서 멈 춥니 다.
GDB 매크로로 일부 스크립트를 작성할 수 있습니다. 또는 1000 번째 (또는 무엇이든) 자식이 코어를 덤프하고 코어를 디버깅하도록 코드를 변경하십시오. –