gdb 사용법에 대한 질문입니다.
글쓴이: bejoy4him / 작성시간: 화, 2004/08/24 - 10:20오전
프로그램을 gdb로 디버깅하려는 상황입니다.
자식 프로세스를 포크하는 프로그램이라 프로그램을 실행시켜놓고 프로세스 ID를 가지고 gdb를 실행시켰습니다.
무한루프를 도는 쓰레드들이 usleep()을 이용하여 우선순위만큼 sleep해가면서 동작하도록 되어있습니다.{ sleep_task(this->priority); }
gdb를 실행하면 프로세스가 중지되어서 원하는 쓰레드로 이동한후
bt를 이용하여 현재 위치를 파악하니 examtask.c에서 우선순위만큼 sleep하는 함수에 가 있더군요.
그래서 다음 라인을 실행시켜 보려고 n혹은 s를 해 보았지만
Single stepping until exit from function _libc_nanosleep,
which has no line number information.
만 출력이 되고 계속 블럭이 걸려있습니다.
어떻게 된것인가요? 다음 문장으로 어떻게 넘어가야 하는지.....
nano sleep에서 반환이 될때 까지 기다린다고 하는데... 이거 원참 답답합니다.
도와주시면 감사하겠습니다.
(gdb) thread 2 [Switching to thread 2 (LWP 4)]#0 0xff19c148 in _libc_nanosleep () from /usr/lib/libc.so.1 (gdb) bt #0 0xff19c148 in _libc_nanosleep () from /usr/lib/libc.so.1 #1 0xff36dd44 in usleep () from /usr/lib/libthread.so.1 #2 0x0001222c in sleep_task (class=TPRIO_NORMAL) at task.c:186 #3 0x00013208 in clientTask (arg=0x1) at examtask.c:148 (gdb) l examtask.c:148 143 /* connection close */ 144 /* task close */ 145 this->kill_flag = TRUE; 146 break; 147 } // end of switch 148 sleep_task(this->priority); 149 } // end of while 150 151 printf("here\n"); 152 if (this->kill_flag == TRUE) { (gdb) n Single stepping until exit from function _libc_nanosleep, which has no line number information.
Forums:
디버깅 정보가 없는 부분으로 들어갔기 때문에 보여줄 것이 없어서 계속 한
디버깅 정보가 없는 부분으로 들어갔기 때문에 보여줄 것이 없어서 계속 한스텝씩 실행만 하고 있는 상태입니다. task.c:186 에서 usleep() 이 시작되었으니 task.c:187 같은 곳에 브레이크포인트를 걸고 c 하시면 실행을 끝내고 이부분에서 멈추어 있습니다.
답장 감사합니다.
답글 감사합니다.
한참이나 고심한 끝에 저도 비슷한 결론을 내리게 되었습니다.
usleep이라는 함수는 제가 만들고 컴파일한것이 아니라 이미 제공된 라이브러리이므로 -g 옵션이 들어가 있지 않아서 위와 같은 현상이 일어난게 아닐까 하구요...
그래서 그 스택(usleep가 수행되는 스택)을 종료할때까지 수행하라는
finish명령을 내리니 올바르게 빠져나올수 있었고 다음 부터는 next명령으로 다음 문장을 실행할수 있었습니다.
댓글 달기