1
내 프로젝트는 대부분의 UNIX 셸에서와 마찬가지로 &으로 arglist를 끝내는 방법으로 백그라운드 처리로 간단한 쉘 프로그램을 구현하는 것입니다. 내 문제는 백그라운드 처리가 자식 프로세스를 생성해야 할 때 GDB에서 셸을 디버깅하는 방법이다. 내가 추신 &과 같은 명령을 실행하고 기능 파서에 중단 점을 설정하려고하면자식 프로세스 디버깅 -GDB/DDD
자녀 처리 코드가
int id;
int child=-1;
int running=0;
if ((strcmp(args[0], "&")==0){
if ((id==fork())==-1)
perror("Couldn't start the background process");
else if (id==0){ //start the child process
running++;
printf("Job %d started, PID: %d\n", running, getpid());
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
execvp(args[0], args);
perror("Can't execute command);
exit(1);
else {
int jobNum= running-(running-1);
if ((waitpid(-1, &child, WNOHANG) == -1)
perror("Child Wait");
else
printf("[%d] exited with status %d\n", jobNum, child>>8);
}
처럼 간다,이 명령은 중단 점을 타격하지 않고 실행합니다. 이것은 혼란스럽고이 경우 디버거를 쓸모 없게 만듭니다. 그것에 대해 무엇을 할 수 있습니까?
두 번째 오류는 내 오류이지만 첫 번째 오류는 무엇을 의미합니까? – Jason
@jason gdb 명령 'set follow-fork-mode'는 gdb가 포크를 만났을 때 gdb가 디버깅을 계속할 측, 부모 측 또는 자식 측을 처리하도록 지시합니다. – matt
설명해 주셔서 감사합니다. – Jason