Java 调试Android SDK库

Java 调试Android SDK库,java,android,c,debugging,android-source,Java,Android,C,Debugging,Android Source,现在,我想通过一种方法逐步了解SDK库(包括C和Java代码),以准确地指出正在发生的事情。到目前为止,我已经安装了NDK并让GDB启动并运行。我能够依附于这个过程。我试过bt和strace,但没有提供任何有用的信息 我需要做什么才能从SDK(以及本机C代码,如果需要的话)进入Java代码并逐行遍历代码 是否有一种方法可以使用GDB提供更有用的信息 我已经能够部分回答我的问题,不幸的是答案并不容易 调试Java 要调试Java源代码,您需要获取Android本身的源代码。位于此处:source.

现在,我想通过一种方法逐步了解SDK库(包括C和Java代码),以准确地指出正在发生的事情。到目前为止,我已经安装了NDK并让GDB启动并运行。我能够依附于这个过程。我试过
bt
strace
,但没有提供任何有用的信息

  • 我需要做什么才能从SDK(以及本机C代码,如果需要的话)进入Java代码并逐行遍历代码

  • 是否有一种方法可以使用GDB提供更有用的信息


  • 我已经能够部分回答我的问题,不幸的是答案并不容易

    调试Java

    要调试Java源代码,您需要获取Android本身的源代码。位于此处:
    source.android.com
    。这里提供了有关如何下载源代码的说明。这些说明声称您需要在OSX或Linux上执行这些步骤,尽管可以使用Cygwin。如前所述,文件不在一个一致的位置。我使用前面提到的页面上提供的生成源代码的zip文件。一旦您将Java文件放在一个地方,当您进入编译的Java代码时,您所要做的就是将Eclipse指向这些文件

    调试本机程序


    我仍然在做这部分的工作,到目前为止,我能够使用Cygwin的GDB连接到我的应用程序,但还没有真正进入本机C文件。据推测,这些库需要在调试模式下构建

    Android是一个多进程UI框架,不同的用户通过binder进行通信。 作为sdk开发人员,如果在提示时将源jar附加到ADT项目中,您应该能够进入客户端Java源代码。 如果要调试应用程序的JNI代码,可以使用NDK调试工具。 如果您想深入这些层或调试多个进程,这会变得很棘手

    请查看文章以了解如何进入客户端本机框架库


    如果您想调试system_server(承载核心框架服务的进程)的Java代码,请查看文章。

    假设您的Java实现从Java直接转换为ARM机器代码,“本机C代码”在哪里?libc.so-您提出了一个很好的观点,本机代码之间可能有另一个Java层。我是否也需要为此下载源代码,或者SDK中的某个地方有预编译的调试符号?我想你会感到困惑。C不是某种集合;开发它的原因与开发Java的原因相同:程序员可以编写可移植的代码,在各种系统上编译和行为相同,而不是编写程序的各种汇编端口。您的Java虚拟机最有可能汇编成您的机器代码方言,而不是C.libc。机器代码也是如此,而不是C。您有可以与我们共享的堆栈跟踪吗?