에뮬레이터 셸에서 gdb를 사용하여 애플리케이션을 실행하려고 합니다. 나는 다음 명령을 사용합니다
gdb <path of exe>
그러나 다음 오류로 인해 응용 프로그램이 시작되지 않습니다.
Starting program: <path of exe>
[Thread debugging using libthread_db enabled]
Program exited normally.
그러나 실행 중인 프로세스를 gdb에 연결하면 제대로 작동합니다.
gdb -pid <process_id>
이유는 무엇입니까?
**
(gdb) b _start
Breakpoint 1 at 0xb40
(gdb) b main
Breakpoint 2 at 0xc43
(gdb) catch syscall exit
Catchpoint 3 (syscall 'exit' [1])
(gdb) catch syscall exit_group
Catchpoint 4 (syscall 'exit_group' [252])
(gdb) r
Starting program: <exe path>
[Thread debugging using libthread_db enabled]
Breakpoint 1, 0x80000b40 in _start ()
(gdb) c
Continuing.
Breakpoint 2, 0x80000c43 in main ()
(gdb) c
Continuing.
Catchpoint 4 (call to syscall 'exit_group'), 0xb7fe1424 in __kernel_vsyscall
()
(gdb) c
Continuing.
Program exited normally.
(gdb)
캐치포인트 4(syscall 'exit_group' 호출), __kernel_vsyscall의 0xb7fe1424는 무엇을 의미합니까? 더 찾아보니 이런 게 있더군요
Single stepping until exit from function main,
which has no line number information.
__libc_start_main (main=0xb6deb030 <main>, argc=1, ubp_av=0xbffffce4,
init=0x80037ab0 <__libc_csu_init>, fini=0x80037b10 <__libc_csu_fini>,
rtld_fini=0xb7ff1000 <_dl_fini>, stack_end=0xbffffcdc) at libc-start.c:258
258 libc-start.c: No such file or directory.
in libc-start.c
그러나 libc.so가 존재하며 경로를 사용하여 내보냈습니다.
export LD_LIBRARY=$LD_LIBRARY:/lib
왜 로딩이 안되나요?
답변1
물론 멈추지 않을 것입니다. 중단점도 설정하지 않았습니다.
즉b __libc_start_main
이 메시지를 살펴보세요. Program exited normally.
이는 gdb가 이를 시작하고 정상적으로 실행을 완료했음을 의미합니다.
답변2
프로그램은 일반적으로 매개변수로 시작됩니까? gdb에서 실행할 때 수동으로 연결한 프로세스를 시작하는 데 사용한 것과 동일한 매개변수를 제공하지 않았을 수 있습니다.
다음 명령을 사용하여 실행 중인 인스턴스를 시작하는 데 사용되는 매개변수를 식별할 수 있습니다.
ps aux | grep [process_name]
매개변수는 다음과 같이 출력에 나열됩니다.
auser 1114 2.8 6.8 316652 139928 ? SLl Aug07 3:24 /usr/local/bin/a_program arg1 arg2 arg3
set args를 사용하여 gdb에서 인수를 설정할 수 있습니다.
(gdb) set args arg1 arg2 arg3