Android如何打印std::cout/printf(重定向stdout)
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的输出都输出到了指定文件中。需要注意的是:参数一指定的路径必须是存在的,而且必须有这个路径的写权限。否则,这个代码“没有任何效果”。
这个方法很好解决了我的问题,特此记录一下。
Android如何打印std::cout/printf(重定向stdout)的更多相关文章
- std::cout和printf
禁止std::cout和printf混用,在多线程环境下可能导致coredump. 说明:printf和std::cout分别为标准c语言与c++中的函数,两者的缓冲区机制不同(printf无缓冲区, ...
- printf和std::cout ...endl
printf效率要比std::cout...endl高些,可以减少打印所花时间
- c++ std::cout重定向到文件
cout默认是与监视器(屏幕)相连,cout出来的内容会输出到屏幕上,通常是会在命令行窗口之中.但有时,我们希望将cout出来的具体日志.错误信息写到某个文件之中,而屏幕上仅仅显示出当前进行的任务,以 ...
- (转)Windows管道(Pipe)重定向stdout,stderr,stdin
参考: http://qiusuoge.com/11496.html http://www.cnblogs.com/BoyXiao/archive/2011/01/01/1923828.html st ...
- 基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现(by 低端码农 2014.10.27)
引言 写这篇技术文的原因,主要有两个: 其一是发现网上大部分描写叙述PLT/GOT符号重定向过程的文章都是针对x86的.比方<Redirecting functions in shared EL ...
- 使用std::cout不能输出显示
在测试一行函数时,出现std::cout不能输出的情况,找不到原因. 1. 只好从main函数第一行,开始测试,直到发现一个函数 o_Initer.ekf_filter(filter, ...
- 多线程std::cout 深入研究
1.研究背景 在测试时发现mingw版本的gcc编译出来的程序,一个主程序新建20个线程,每个线程都循环向cout输出信息,几分钟程序就崩了,而用msvc和gcc-linaro版gcc交叉编译器编译出 ...
- Visual Studio将std::cout输出到Output窗口
在debug的时候,输出到Output需要使用OutputDebugString函数,但部分库的log是采用std::cout输出的,需要用控制台(黑窗)程序来查看输出.有没有一种使用GUI和Outp ...
- std::cout彩色输出
Mac OS效果 Windows 效果 想写这个东西其实是因为最近要写个命令行的工具,但是有个问题是什么呢?就是传统的那个黑漆漆的窗口看起来很蛋疼.并且完全看不到重点,于是就想起 来这么一个东西.相对 ...
随机推荐
- map set iterator not incrementable 解决办法
例子: #include <iostream> #include <map> using namespace std; int main() { map<int, int ...
- Duilib初级控件扩展一例: 具有鼠标滚动消息的OptionUI
转载:http://www.cnblogs.com/memset/p/Duilib_MouseWheelOptionUI_Deprecated.html
- VC 线程池
参照:http://www.cnblogs.com/kzloser/archive/2013/03/11/2909221.html 参照:http://blog.csdn.net/pjchen/art ...
- 设置控件如ImageButton可见与否
继承view的控件有三种ui属性: 1.setVisibility(View.Gone); 不可见,不占有空间 2.setVisibility(View.VISIBLE); 可见 3.setVisib ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
- 【第三十一章】 elk(2)- 第二种架构(最常用架构)
参考:http://linuxg.blog.51cto.com/4410110/1761757 最常用架构: 一.安装redis 1.下载:http://redis.io/download 2.解压后 ...
- Pytorch版本yolov3源码阅读
目录 Pytorch版本yolov3源码阅读 1. 阅读test.py 1.1 参数解读 1.2 data文件解析 1.3 cfg文件解析 1.4 根据cfg文件创建模块 1.5 YOLOLayer ...
- Linux command line exercises for NGS data processing
by Umer Zeeshan Ijaz The purpose of this tutorial is to introduce students to the frequently used to ...
- python 时间元组转可视化时间
>>> import time >>> time.asctime() 'Fri Jan 4 11:17:20 2019' >>> time.asc ...
- nginx 启停命令
nginx 启停配置 #!/bin/sh # # nginx Startup script for nginx # # chkconfig: - 85 15 # processname: nginx ...