GDB는 솔라리스에서 영원히 멈춥니다.

GDB는 솔라리스에서 영원히 멈춥니다.

rungdb 프롬프트에서 명령을 시도할 때마다 GDB가 중단되는 것 같습니다. 을 실행하면 ps두 개의 gdb 프로세스가 생성되고 pstack은 다음을 표시합니다.

15:47:02:/home/stufs1/pmanjunath/a2/Asgn2_code$ uname -a
SunOS compserv1 5.10 Generic_118833-24 sun4u sparc SUNW,Sun-Blade-1500

15:44:04:/home/stufs1/pmanjunath/a2/Asgn2_code$ ps aux | grep gdb
pmanjuna 13121  0.1  0.1 1216  968 pts/23   S 15:44:11  0:00 grep gdb
pmanjuna 13077  0.0  0.1 7616 4392 pts/15   S 15:41:41  0:00 gdb client
pmanjuna 13079  0.0  0.1 7616 4392 pts/15   T 15:41:51  0:00 gdb client

15:44:50:/home/stufs1/pmanjunath/a2/Asgn2_code$ pstack 13077
13077:  gdb client
 fef42c30 vfork    ()
 00065938 procfs_create_inferior (32ea10, 32d728, 317430, 1, 0, 657a8) + 190
 0008c668 sol_thread_create_inferior (32ea10, 32d728, 317430, 1, 25e030, 0) + 18
 000ffda0 find_default_create_inferior (32ea10, 32d728, 317430, 1, 405c, 4060) + 20
 000d8690 run_command_1 (0, 1, 32ea10, 1, ffbff0f4, 316fd0) + 208
 0007e344 do_cfunc (316fd0, 0, 1, 1, 0, 0) + c
 0008016c cmd_func (316fd0, 0, 1, 0, 1, 0) + 30
 0004c1d4 execute_command (316fd0, 1, 0, 4f00c, 1, 2dc800) + 390
 000eb6a0 command_handler (2f4ee0, 0, 2f3800, 8acf, ff000000, ff0000) + 8c
 000ebbcc command_line_handler (2f3800, 7200636c, 32d71c, 7200, 2dfc00, 2dfc00) + 2a4
 0019b354 rl_callback_read_char (fef6b6f8, 0, 931d8, 0, fef68284, fef68284) + 340
 000eafb4 rl_callback_read_char_wrapper (0, fef709b0, 0, 11, 0, eafb0) + 4
 000eb590 stdin_event_handler (0, 0, 932b4, fef6fad4, 0, 1) + 60
 000ea780 handle_file_event (1, 1084, 932f4, 4f00c, ff1f2000, 1000) + bc
 000ea11c process_event (0, 0, ffffffff, 0, 2df9f8, 0) + 84
 000ea9d4 gdb_do_one_event (1, 1, 0, 2f3158, ff1f2000, 2) + 108
 000e7cd4 catch_errors (ea8cc, 0, 2473a8, 6, ffbff6f0, 1) + 5c
 000907e8 tui_command_loop (0, 64, ffffffff, 0, 0, 2f6190) + e0
 000e7fcc current_interp_command_loop (800000, ff400000, ffc00000, 800000, 0, 331b40) + 54
 00045b80 captured_command_loop (1, 1, 0, fef33a54, ff1f2000, 2) + 4
 000e7cd4 catch_errors (45b7c, 0, 22db20, 6, 2dc400, 0) + 5c
 0004625c captured_main (2d1800, 2f4ae0, 0, 0, 0, 0) + 6a0
 000e7cd4 catch_errors (45bbc, ffbffc18, 22db20, 6, 0, 0) + 5c
 00046bb0 gdb_main (ffbffc18, 0, 0, 0, 0, 0) + 24
 00045b6c main     (2, ffbffc9c, ffbffca8, 2f45b8, ff1f0100, ff1f0140) + 28
 000459dc _start   (0, 0, 0, 0, 0, 0) + 5c

15:45:38:/home/stufs1/pmanjunath/a2/Asgn2_code$ pstack 13079
13079:  gdb client
 fef4098c execve   (ffbfffe6, ffbffc9c, ffbffca8)
 feec4a7c execlp   (ffbffdc6, ffffffff, 289bc0, ffbfed18, 0, ffbfed10) + ac
 0016e3e8 fork_inferior (32ea10, 32d728, 317430, 6567c, 653dc, 0) + 310
 00065938 procfs_create_inferior (32ea10, 32d728, 317430, 1, 0, 657a8) + 190
 0008c668 sol_thread_create_inferior (32ea10, 32d728, 317430, 1, 25e030, 0) + 18
 000ffda0 find_default_create_inferior (32ea10, 32d728, 317430, 1, 405c, 4060) + 20
 000d8690 run_command_1 (0, 1, 32ea10, 1, ffbff0f4, 316fd0) + 208
 0007e344 do_cfunc (316fd0, 0, 1, 1, 0, 0) + c
 0008016c cmd_func (316fd0, 0, 1, 0, 1, 0) + 30
 0004c1d4 execute_command (316fd0, 1, 0, 4f00c, 1, 2dc800) + 390
 000eb6a0 command_handler (2f4ee0, 0, 2f3800, 8acf, ff000000, ff0000) + 8c
 000ebbcc command_line_handler (2f3800, 7200636c, 32d71c, 7200, 2dfc00, 2dfc00) + 2a4
 0019b354 rl_callback_read_char (fef6b6f8, 0, 931d8, 0, fef68284, fef68284) + 340
 000eafb4 rl_callback_read_char_wrapper (0, fef709b0, 0, 11, 0, eafb0) + 4
 000eb590 stdin_event_handler (0, 0, 932b4, fef6fad4, 0, 1) + 60
 000ea780 handle_file_event (1, 1084, 932f4, 4f00c, ff1f2000, 1000) + bc
 000ea11c process_event (0, 0, ffffffff, 0, 2df9f8, 0) + 84
 000ea9d4 gdb_do_one_event (1, 1, 0, 2f3158, ff1f2000, 2) + 108
 000e7cd4 catch_errors (ea8cc, 0, 2473a8, 6, ffbff6f0, 1) + 5c
 000907e8 tui_command_loop (0, 64, ffffffff, 0, 0, 2f6190) + e0
 000e7fcc current_interp_command_loop (800000, ff400000, ffc00000, 800000, 0, 331b40) + 54
 00045b80 captured_command_loop (1, 1, 0, fef33a54, ff1f2000, 2) + 4
 000e7cd4 catch_errors (45b7c, 0, 22db20, 6, 2dc400, 0) + 5c
 0004625c captured_main (2d1800, 2f4ae0, 0, 0, 0, 0) + 6a0
 000e7cd4 catch_errors (45bbc, ffbffc18, 22db20, 6, 0, 0) + 5c
 00046bb0 gdb_main (ffbffc18, 0, 0, 0, 0, 0) + 24
 00045b6c main     (2, ffbffc9c, ffbffca8, 2f45b8, ff1f0100, ff1f0140) + 28
 000459dc _start   (0, 0, 0, 0, 0, 0) + 5c

이러한 프로세스가 vfork중단되는 이유는 무엇입니까 execve? 내 대학 컴퓨터에서 이런 일이 발생하며 급우들도 계정을 가지고 있습니다. 그들 중 누구도 문제를 보고하지 않았습니다. 나에게만 일어나는 일인 것 같다.

편집하다: 그리고힐리의 도움, 문제를 해결할 수 있었습니다. 로그인하면 내가 csh기본입니다. GDB는 여기서 훌륭하게 작동합니다. 이제 bash 쉘이 실행 bash됩니다 csh. 이제 GDB가 정지됩니다. 출력을 확인해보니 echo $SHELL이상한 점이 발견되었습니다 .

$ echo $SHELL
 /bin/bash=

출력 끝에 등호가 있습니다. 나는 GDB가 내 생각에 기본 쉘 변수를 사용하여 bash 쉘을 생성하려고 시도하고 있다고 생각하지만 등호에 대한 바이너리 cos를 찾을 수 없습니다. 이제 문제는 등호가 쉘 경로에 어떻게 들어가는지 알아내는 것입니다.

답변1

호출 프로세스가 vfork()중단되고 vfork() parent하위 프로세스가 당시 프로세스 이미지를 차용하므로 _exit()하위 프로세스가 또는 에 대한 호출을 완료할 때까지 실행할 수 없습니다 exec*().

따라서 exec*()가 중단되는 이유를 알아내야 합니다.

exec*() 중단의 일반적인 이유는 NFS 중단 또는 존재하지 않는 자동 마운트 지점 통과입니다.

truss -p 13079보류 중인 exec*()의 경로를 가져오기 위해 호출됩니다 .

관련 정보