安卓系统中的cpp文件如何调试
小弟先在做安卓下的音频应用程序开发,从java层写了一个应用程序,能够实现简单的录音功能。之后就想分析一下整个的调用过程,结果我发现安卓下的音频架构还蛮复杂,有java层的,安卓系统中的c++语言写的很多cpp文件,然后就是底层驱动。
在调试cpp文件(如audiorecord.cpp,audioflinger.cpp等)的时候,我加入了一些fprintf(stdout,"***")语句想进行跟踪。因此重新make kernel,然后把新内核下载到板子上,重启之后没有打印信息呀。。。
请问是不是修改了这些cpp文件之后make kernel牵扯不到他们呢?如果我想能看到这些加入的打印信息,我应该怎么做呢?请高手指点指点呀。。。
先行谢过。。。 Android alsa音频 调试
[解决办法]
谢谢指点。。。我先找找so文件。我之前用adb push文件到板子上的时候,system文件夹说我没有权限,只能push到sdcard文件夹下。我应该怎么获得权限呢?
LOCAL_MODULE
可是这里面有两个LOCAL_MODULE,一个是LOCAL_MODULE:=libmedia_helper,一个是LOCAL_MODULE=libmedia
而且我在文件夹下没有看到这两个文件。。。
找到编译好后的so文件,把他push到system/lib里面.你应该就能看到效果了
下班了
eclipse不是只能调试java程序吗?那我怎么把我现在要调试的这些文件加到eclipse中呢?
FrameWork层的cpp文件的Log直接在eclipse里面调试就有输出,Kernel层bug在Eclipse中不会有打印
eclipse不是只能调试java程序吗?那我怎么把我现在要调试的这些文件加到eclipse中呢?
FrameWork层的cpp文件的Log直接在eclipse里面调试就有输出,Kernel层bug在Eclipse中不会有打印
你把自己的so库编译出来替换掉/system/lib下相应的库文件,你有确定的机器是工程机,才能够push进去的,就是你的机器在adb shell命令后,前面那个符号是"#"而不是"$".
adb push 和adb shell我知道,也用过。我这边的板子也有。向你说的那个so库,我应该怎么编译呢?在源码目录下执行什么指令还是在这些cpp文件目录下执行什么指令?谢谢指点。。。
你会看到源码目录下有个build目录对吧,里面有个envsetup.sh脚本
敲下面这个命令
source build/envsetup.sh
然后你就可以用mm了,前提是你已经编译过整个源码了,不然会有些依赖的库找不到.
谢谢你的耐心解答。。。可能是之前我对你的一些指点理解错误,呵呵。。。
1.我开始以为你说的源码是我之前所说的cpp文件,因此我执行mm的时候是在cpp所在文件目录下执行的。现在明白了你说的源码是系统需要的所有的代码,即为源码根目录,呵呵。
2.之前执行的时候确实没有执行“source build/envsetup.sh”和另一个“lunch full_godbox-eng”,这两个指令是必须执行的。
现在我直接在源码根目录下执行mm,已经开始编译。刚开始输出的信息跟我make kernel的时候一样。在编译过程中出现过问题,是因为我之前修改过的Android.mk文件有问题,现在已经改正,正在编译中。非常感谢你的指点。
我现在的理解是:编译完成之后找到对应的so文件,然后把so文件push到板子的/system/lib目录下。
如我之前所说的,现在没有对板子系统文件的操作权限,你之前说的adb remount我没有用过,能具体提示一下吗?
再次感谢你的指点。。。
eclipse不是只能调试java程序吗?那我怎么把我现在要调试的这些文件加到eclipse中呢?
FrameWork层的cpp文件的Log直接在eclipse里面调试就有输出,Kernel层bug在Eclipse中不会有打印
你把自己的so库编译出来替换掉/system/lib下相应的库文件,你有确定的机器是工程机,才能够push进去的,就是你的机器在adb shell命令后,前面那个符号是"#"而不是"$".
adb push 和adb shell我知道,也用过。我这边的板子也有。向你说的那个so库,我应该怎么编译呢?在源码目录下执行什么指令还是在这些cpp文件目录下执行什么指令?谢谢指点。。。
你会看到源码目录下有个build目录对吧,里面有个envsetup.sh脚本
敲下面这个命令
source build/envsetup.sh
然后你就可以用mm了,前提是你已经编译过整个源码了,不然会有些依赖的库找不到.