织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

Android如何打印std::cout/printf(重定向stdout)

落鹤生 发布于 2015-07-21 09:47 点击:次 
经过实验,这个方法可以输出JAVA代码中的System.out/err。但是现在很多应用为了跨平台用C/C++开发(特别是游 戏,我调试的也是游戏),C/C++中的std::cout/printf用这种方法并不能输出,网上有些解释说需要先root设备($adb root),再执行上面的语句。由于我的情况不允
TAG: 重定向stdout  log机制  

Android应用调试时没有stdout和stderr的输出,网上看到的解释都是下面这个样子:

#################################################

Android系统在默认情况下,将stdout和stderr(Java中的System.out 和 System.err)重定向到/dev/null。

如果一个进程运行了 Dalvik VM,那么就可以把上面两个输出拷贝到日志文件中去,这种情况下,系统会把stdout

和stderr输出到标签为“stdout”和“stderr”的日志中。

 

具体做法如下:

$ adb shell stop

$ adb shell setprop log.redirect-stdio true

$ adb shell start

(以上命令执行之后立即生效,不过,如果重启手机,则上面的设置就消失了。

可以在 /data/local.prop 文件中加入命令,从而无需重新执行以上命令。)

##################################################

 

经过实验,这个方法可以输出JAVA代码中的System.out/err。但是现在很多应用为了跨平台用C/C++开发(特别是游 戏,我调试的也是游戏),C/C++中的std::cout/printf用这种方法并不能输出,网上有些解释说需要先root设备($adb root),再执行上面的语句。由于我的情况不允许root,所以就没有验证。

继续网上搜索资料,发现一个方法:

freopen函数。

这个函数是用来重定向的,具体用法可以可以自行google。

我在我项目C/C++代码执行的入口地方加入了下面代码:

freopen("/sdcard/tmp/loglog.txt", "w", stdout);

重新编译执行,所有std::cout/printf的输出都输出到了指定文件中。需要注意的是:参数一指定的路径必须是存在的,而且必须有这个路径的写权限。否则,这个代码“没有任何效果”。

 

这个方法很好解决了我的问题,特此记录一下。

(Franck)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201507/17357.html]
本文出处:博客园 作者:Franck 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容