在gdb中看不到任何函数

时间:2014-07-06 15:46:30

标签: 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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这是非常常见的症​​状,本机apps / .so没有“-O0 -g”选项。

看起来您正在构建使用AOSP附带的C / C ++运行时的纯本机应用程序。

只要您维护自己的构建系统,您构建的方式就可以正常工作。一旦开始使用Android.mk构建,就不是直接控制调试标志。

如果您计划在AOSP中进行大量本机开发,请查看Debugging native applications of Android using eclipse文章。