为什么在android上重定向stdout / stderr不起作用?

时间:2011-03-31 11:38:39

标签: android android-ndk native stdout

我下载了SDL 1.3并在我的Android 2.2设备上与OpenGL ES一起测试了它。它工作正常,但我没有得到printf调用的输出。我尝试了android developer page中提到的下面的命令,但Eclipse中的DDMSadb logcat都没有报告程序使用printf编写的字符串。我确保过滤了stdout代码。

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:2)

根据此presentationlog.redirect-stdio用于Dalvik输出,要重定向C / C ++输出(例如printf),您必须在设备上安装busybox并使用其xargs像这样的实用程序:

myprogram | xargs log

这显然适用于作为独立可执行文件调用的代码。如果它仅用于调试目的,您可以编写一个小程序来调用您的库并使用xargs从您的应用程序中调用它。

答案 1 :(得分:1)

另一种方法是使用文件/data/local.prop,只包含行log.redirect-stdio=true。也许这效果更好?另外,请注意stdout是缓冲的,因此可能是您的输出仍然位于缓冲区中,等待刷新。您可以手动拨打fflush进行检查。