gdb não está iniciando o aplicativo

0

Estou tentando executar um aplicativo usando o gdb no shell do emulador. Eu uso o seguinte comando

gdb <path of exe>

No entanto, o aplicativo não inicia e recebo o seguinte erro

Starting program: <path of exe>
[Thread debugging using libthread_db enabled]

Program exited normally.

No entanto, quando eu anexar um processo em execução ao gdb, ele funciona bem.

gdb -pid <process_id>

Qual poderia ser o motivo?

**

(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) 

O que significa o Catchpoint 4 (chamar para syscall 'exit_group'), 0xb7fe1424 no __kernel_vsyscall? Eu sondou mais e eu encontrei isso

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

No entanto, a libc.so está presente e eu exportei seu caminho também usando

export LD_LIBRARY=$LD_LIBRARY:/lib

Por que não está carregando?

    
por Yogi 10.04.2013 / 10:48

2 respostas

2

Claro que não vai parar, você nem definiu um ponto de interrupção.

ou seja, b __libc_start_main

Veja esta mensagem: Program exited normally. significa que o gdb iniciou e concluiu a execução normalmente.

    
por 10.04.2013 / 12:05
1

O programa normalmente começa com argumentos? É possível que, quando você o executar no gdb, não esteja fornecendo os mesmos argumentos usados para iniciar o processo ao qual você anexa manualmente.

Você pode identificar quaisquer argumentos em que uma instância em execução foi iniciada usando o seguinte comando:

ps aux | grep [process_name]

Os argumentos serão listados na saída como:

auser      1114  2.8  6.8 316652 139928 ?       SLl  Aug07   3:24 /usr/local/bin/a_program arg1 arg2 arg3

Você pode definir os argumentos em gdb usando set args:

(gdb) set args arg1 arg2 arg3
    
por 07.08.2015 / 18:11

Tags