android - 在 gdb 中看不到任何函数

标签 android c linux debugging gdb

我正在尝试调试在 Android ARM 环境中运行的非常简单的 C 程序:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc , char **argv)
{
    printf ("%d, sleeping for 10\n", getpid());
    sleep (10);
    printf ("%d\n", getpid());
    return 0;
}

我编译它:

arm-linux-androideabi-gcc --sysroot /Application/Binaries/android-ndk/platforms/android-15/arch-arm/ printf.c -o printf

我启动了该应用程序并在模拟器中启动了 gdbserver,并在本地附加。

现在,如果我尝试打破某些东西:

(gdb) b 
_DYNAMIC               __FINI_ARRAY__         __bss_start            _end                   atexit
_GLOBAL_OFFSET_TABLE_  __INIT_ARRAY__         __dso_handle           _start                 main
__CTOR_LIST__          __PREINIT_ARRAY__      _edata                 abitag                 
(gdb) info sharedlibrary 
From        To          Syms Read   Shared Object Library
                        No          /system/bin/linker
                        No          libc.so

没有可见的功能。而 libc.so 似乎没有加载?这太奇怪了。

我错过了什么吗?

编辑

添加几个参数:

arm-linux-androideabi-gcc --sysroot /Application/Binaries/android-ndk/platforms/android-15/arch-arm/ printf.c -o printf -g -Wall

现在:

(gdb) b 
/Application/Binaries/android-ndk/platforms/android-15/arch-arm//usr/include/unistd.h
_DYNAMIC
_GLOBAL_OFFSET_TABLE_
__CTOR_LIST__
__FINI_ARRAY__
__INIT_ARRAY__
__PREINIT_ARRAY__
__bss_start
__dso_handle
__page_shift
__page_size
_edata
_end
_start
abitag
atexit
char
double
float
int
long int
long long int
long long unsigned int
long unsigned int
main
printf.c
short int
short unsigned int
signed char
unsigned char
unsigned int

最佳答案

您需要使用 -Wall -g 标志编译到您的 GCC ARM 的交叉编译器。

一旦程序运行,共享库(包括 libc.so)就会被加载。尝试在 main 中放置一个断点,只有在那里执行 info sharedlibrary 事情。

关于android - 在 gdb 中看不到任何函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24597580/

相关文章:

android - PWA 不会在 android 上以独立模式打开

android - REST API 的推荐 Observable 类型

linux - 两个进程中两个相同的虚拟地址如何映射到不同的物理地址?

linux - bash颜色: OS X vs Linux

java - Google Glass Live Card 菜单操作导致崩溃

android - 带边框的网格布局

c - 如何使用从 .x 文件生成的 XDR 结构(内存分配)

c - (float32) 4 字节 (uint8) 转换为 float64 (c++/C)

c - 为什么解引用与 malloc 的行为不同?

linux - 开启tomcat.service报错 "Failed to execute operation: Bad message"