gdb 未启动应用程序

gdb 未启动应用程序

我正在尝试在模拟器 shell 中使用 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) 

Catchpoint 4 (call to 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

当然不会停止,你连断点都没有设置。

IEb __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

相关内容