gdb 애플리케이션이 시작되지 않았습니다.

gdb 애플리케이션이 시작되지 않았습니다.

에뮬레이터 셸에서 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

관련 정보