如何在真实设备上调试Android本机代码

neu*_*242 5 c++ debugging android android-source android-music-player

我在Android中的媒体后端(主要是Stagefrightplayer)遇到了一些麻烦,我想了解它为什么会抛出错误.错误通常是设备特定的,因此在仿真器上进行调试是不够的.

例:

I/AwesomePlayer(  147): mConnectingDataSource->connect() returned -1004
V/MediaPlayerService(  147): [332] notify (0x272830, 100, 1, -1004)
E/MediaPlayer(24881): error (1, -1004)
E/MediaPlayer(24881): Error (1,-1004)
W/PlayerListener(24881): Received error: what = 1, extra = -1004
Run Code Online (Sandbox Code Playgroud)

例2:

E/MediaPlayer(  941): error (1, -2147483648)
Run Code Online (Sandbox Code Playgroud)

我也让玩家完全开玩笑并吐出了痕迹.txt.

有没有办法调试正在发生的事情,就像我调试Java代码一样?谢谢.

Mat*_*ieu 9

你可以做很多事情.

如果你认为错误是在框架本身,那么获取源代码并挖掘http://source.android.com/

否则,Android的最佳调试器是DDMS,它可以与仿真器一起使用,也可以与真实设备一起使用.http://developer.android.com/guide/developing/tools/ddms.html

dumpstate通过ADB(http://developer.android.com/guide/developing/tools/adb.html)也会给你什么设备上发生的一个完整的快照,但它会你很难得到确切的点当错误发生时.

虽然这仍然不会像GDB那样为您提供源代码级调试(或者我不确定您通常的调试Java代码的方式是什么意思).

如果你真的把内核称为内核,那么你不再是Android了,而是更多的Linux世界,但我不认为你需要走得那么远.

如果您在使用特定的Android应用程序时遇到问题(这不是您自己的应用程序),我担心您运气不好.

对于MediaPlayer的一部分,Eclair的文件位于 https://android.googlesource.com/platform/frameworks/base/+/eclair-release/media/java/android/media/MediaPlayer.java,但无法找到您放在那里的特定错误消息.