关于javalogcat的信息
今天给各位分享javalogcat的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、请问logcat怎么看~
- 2、logcat v time 怎么用
- 3、在Android开发中,Logcat是什么?
- 4、java执行Logcat命令时如何停止线程运行
- 5、java执行logcat重定向后,怎么停止logcat运行?
- 6、如何在JNI编程中使用logCat
请问logcat怎么看~
首先看“12-16 03:27:27.672: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.snake/com.example.android.snake.Snake}: java.lang.NullPointerException
”这句,说明是空指针错误,具体是哪里有错误,就在下面的信息里找含有你包名的那条信息,有时候会有多条,看第一条就行了,这里是“12-16 03:27:27.672: E/AndroidRuntime(276): at com.example.android.snake.Snake.onCreate(Snake.java:55)”这一条,最后那个“(Snake.java:55)”说明是在com.example.android.snake.Snake.java中的55行报错,你可以手动去找,但更方便的是直接在这条错误信息上双击就可以直接跳转过去了。
logcat v time 怎么用
1 找到logcat呢,window-show view-logcat.就添加成功了。
2 运行你的程序,logcat上会显示程序运行的信息。每条信息都包含五个部分,Time,标题空白,pid,tag和Message。
1.time——执行时间
2.标题空白——表示的是信息的种类,分为V,D,I,W,E五种。
V : verbose ,显示全部信息
D : Debug ,显示调试信息
I : Info ,显示一般信息
W : Warming,显示警告信息
E : Error , 显示错误信息
点击LogCat上面的用圆圈括起来的V,D,I,W,E来改变显示的范围。比如选择了W,那就只有警告信息和错误信息可以显示出来了。
3.pid—— 程序运行时的进程号
4.tag——标签
5.Message——进程运行时的一些具体信息
3 在logcat中可以输出我们想要的信息。在java相关函数中增加调试代码,比如log.i("this is logcat!");
4 log的颜色不同级别不同,很好认。
Log.v 的调试颜色为黑色的,任何消息都会输出
Log.d的输出颜色是蓝色的,仅输出debug调试
Log.i的输出为绿色,一般提示性的消息information
Log.w的意思为橙色,可以看作为warning警告
Log.e为红色,显示错误信息
5 Logcat命令列表
-b buffer 加载一个可使用的日志缓冲区供查看,比如event和radio. 默认值是main。具体查看Viewing Alternative Log Buffers.
-c 清楚屏幕上的日志.
-d 输出日志到屏幕上.
-f filename 指定输出日志信息的filename,默认是stdout.
-g 输出指定的日志缓冲区,输出后退出.
-n count 设置日志的最大数目count.,默认值是4,需要和 -r选项一起使用。
-r kbytes 每kbytes时输出日志,默认值为16,需要和-f选项一起使用.
-s 设置默认的过滤级别为silent.
-v format 设置日志输入格式,默认的是brief格式,要知道更多的支持的格式,参看Controlling Log Output Format.
以下命令在D盘下生产日志文本:adb logcat *:E d:\log.txt
在Android开发中,Logcat是什么?
最后介绍一下Android的Log工具LogCat。
首先在Eclipse中选择Windows Show View Other... Android LogCat,确定后会出现LogCat显示框,用户添加的Log将会在这里显示。使用时直接在代码中插入“Log.i("info","this is a log");”,那么在执行到该语句时,LogCat显示框中将出现“this is a log”。
在Eclipse中安装ADT和android sdk包之后,运行以开发的android程序时,在LogCat窗口中会显示出一系列的信息,这些信息是每一个程序通过Dalvik虚拟机所传出的实时信息,可以方便我们对程序的了解。
在log窗口中,每条信息都包含五个部分,Time,标题空白,pid,tag和Message。
1、Time
表示执行的时间,这个信息对于学习生命周期,分析程序运行的先后顺序特别有用。
2、标题空白的列
表示的是信息的种类,分为V,D,I,W,E五种。
V:verbose,显示全部信息
D:Debug,显示调试信息
I:Info,显示一般信息
W:Warming,显示警告信息
E:Error,显示错误信息
可以通过点击LogCat上面的用圆圈括起来的V,D,I,W,E来改变显示的范围。比如选择了W,那就只有警告信息和错误信息可以显示出来了。
3、pid
表示程序运行时的进程号
4、tag
标签,通常表示系统中的一些进程名,比如我们运行helloworld程序的话,就会看到activitymanager在运行。
5、Message
表示进程运行时的一些具体信息,比如我们运行helloworld程序的话,就会看到starting activity...helloWorld的字样
可以输出LogCat的信息到文本文件中,以方便分析。在下拉框中选择输出选择的信息就可以了。
下面是输出到文件中的启动helloWorld程序时的一条信息的例子,分别用5个下划线标出了上面介绍的内容:
05-20 15:46:10.129: INFO/ActivityManager(60): Starting activity: Intent { act=android.intent.action.MAIN cat=
[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.android.helloworld/.HelloWorld }
6、Filter的使用
可以在Filter中输入筛选信息,使LogCat中只现实我们需要分析的信息。比如我们只想看和HelloWorld相关的信息,就可以在
Filter中输入HelloWorld,这样只有Message 中包含HelloWorld的内容才会显示出来。
7、LogCat中信息不能显示
上面说了这么多关于logCat的使用,可能LogCat中根本就什么信息都没有显示!没关系,只要在Eclipse中选择window-
show view-other-android-devices就可以 了。
8、在LogCat中输出程序的运行信息
a、在程序中导入相应的包:import android.util.Log;
b、在需要输出信息的函数中增加相关的调试代码:Log.i("hi world","oncreate");
方法i是Log类的静态方法,可以直接使用,我们看着各类的定义可以看到,它提供了多种输出方法,分别对应我们上面提到的V,D,I,W,E。用哪个方法就决定了输出的类型,这里用i,表示输出的是information。
这个方法中的第一个参数就是要显示在Tag那一栏的内容,把这条语句加到OnCreate方法中,执行时LogCat中就会显示如下的信息: 05-22 21:58:22.894 I 3910 hi world onCreate
9、创建新的Filter
有时候只想看我们程序中用Log类的相关方法输出的各种信息,这时就可以考虑新建一个过滤器。点击LogCat的右上角的“+”号,可以创建一个新的过滤器。比如我们在by Log Tag的选项中填入上面程序输出的"hi world"这个tag。这样再运行时在我们新创建的Filter中就只显示hi world这个tag标记出来的信息了。
Android开发中的logcat工具使用详解--------
logcat是Android中一个命令行工具,可以用于得到程序的log信息。
logcat使用方法如下所示:
logcat [options] [filterspecs]
logcat的选项包括:
-s 设置过滤器,例如指定 '*:s'
-f filename 输出到文件,默认情况是标准输出。
-r [kbytes] Rotate log every kbytes. (16 if unspecified). Requires -f
-n count Sets max number of rotated logs to count, default 4
-v format 设置log的打印格式, format 是下面的一种:
brief process tag thread raw time threadtime long
-c 清除所有log并退出
-d 得到所有log并退出 (不阻塞)
-g 得到环形缓冲区的大小并退出
-b buffer 请求不同的环形缓冲区 ('main' (默认), 'radio', 'events')
-B 输出log到二进制中。
过滤器的格式是一个这样的串:
tag[:priority]
其中 tag 表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:
V Verbose
D Debug
I Info
W Warn
E Error
F Fatal
S Silent
事实上logcat的功能 是由Android的类android.util.Log决定的,在程序中log的使用方法如下所示:
Log.v() -------------------- VERBOSE
Log.d() -------------------- DEBUG
Log.i() -------------------- INFO
Log.w() -------------------- WARN
Log.e() -------------------- ERROR
以上log的级别依次升高,DEBUG信息应当只存在于开发中,INFO, WARN,ERROR这三种log将出现在发布版本中。
对于JAVA类,可以声明一个字符串常量TAG,Logcat可以根据他来区分不同的log,例如在计算器(Calculator)的类中,定义如下所示:
public class Calculator extends Activity {
/* ...... */
private static final String LOG_TAG = "Calculator";
private static final boolean DEBUG = false;
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
/* ...... */
由此,所有在Calculator中使用的log,均以"Calculator"为开头。
例如使用方法如下所示:
# logcat
得到一个log片段
W/KeyCharacterMap( 130): No keyboard for id 0
W/KeyCharacterMap( 130): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
I/ActivityManager( 52): Displayed activity com.android.contacts/.DialtactsContactsEntryActivity: 983 ms
I/ARMAsse mbler( 52): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x25c978:0x25ca44] in 1764174 ns
I/ARMAssembler( 52): generated scanline__00000077:03515104_00000001_00000000 [ 46 ipp] (65 ins) at [0x25d1c8:0x25d2cc] in 776789 ns
D / dalvikvm ( 130 ): GC freed 834 objects / 81760 bytes in 63ms
D/dalvikvm( 52): GC freed 10588 objects / 425776 bytes in 94ms
其中W/I/D 表示log的级别,“dalvikvm ”“ARMAssembler ”等是不同组件(component)的名称,后面括号里面的数字 表示了发出log的进程号。
使用技巧:
1.使用logcat 在后台运行
2.使用-d得到所有log
3.使用-f或者重定向(和)输出到文件
4.使用-s设置过滤器,得到想要的log。
当然,最重要的还是在程序中加入恰当的log.
许多初次接触Android开发的朋友会遇到调试的问题,如何能够根据错误提示迅速的找到“出事地点呢”?在Eclipse+ADT的开发环境中没有好的直接跟踪对象内容的方法,通过使用android.util.Log类可以帮助你自己查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。
android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。当我们在DDMS进行调试时他们的区别并不大,只是显示的颜色不同,但通过Logcat的过滤器我们可以过滤显示某类的,一般对于执行错误的断点,下在Log.e比较合适。但是Android开发网根据规范建议VERBOSE,DEBUG信息应当只存在于开发中,最终版本只可以包含 INFO, WARN,ERROR这三种日志信息。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易区分不同的类的日志。例如:
private static final String TAG = "MyActivity";
接下来我们就可以用Log随心所欲的观察Android代码中的每个细节:Log.e(TAG, "android123.com.cn"); 但是要记住这个Log类的参数都是String类型的。
java执行Logcat命令时如何停止线程运行
好像没什么办法,以下是Process类关于进程杀死的描述The subprocess is not killed when there are no more references to the Process object, but rather the subprocess continues executing asynchronously。也就是说,Process.destroy可能可以杀死子进程,也可能杀不死子进程。其中的相关性,要看destory的实现才知道。通过伪终端的方法,可以发送Ctrl+c进而发送SIGINT中断来杀死进程。
java执行logcat重定向后,怎么停止logcat运行?
logcat加参数-d后
就不能输出后面的log信息了。我想使用adb
logcat
命令一直输出log信息到文件,执行其他操作后,再停止log输出。就是这种思路:Process
proc
=
Runtime.getRuntime().exec(new
String[]
{
"cmd.exe",
"/c",
tmpCmd
});
//输出log
重定向到文件//其他操作
proc.destroy();//停止输出log
如何在JNI编程中使用logCat
在android编程java代码中,我们知道,可以使用Log.v等一些将日志输出到logcat,然后我们就可以看到日志输出信息。当然,也可以在外壳里使用亚行 NDK是否支持了。以往,在JNI编程中,调试本地接口方法比较困难,往往都是采用打日志的方式将日志输出到文件。今天,在目录
/build/platforms/android-8/arch-arm/usr/include/android/log.h
下发现的Android NDK提供的头文件,打开瞧瞧
[CPP]鉴于plaincopy
/ *
*版权所有(C)2009年的Android开源项目
*
* Apache许可证下授权,版本2.0(以下简称“许可证”);
*您不能使用这个文件除了在遵守许可。
*您可以在获得许可证的副本
*
*
*
*除非适用法律要求或书面同意,软件
*许可证下发布分布在一个“AS IS”的基础上,
*无担保或任何形式的条件,明示或暗示的保证。
*请参阅许可证特定语言的管理权限和
*许可证下的局限性。
* /
#ifndef的_ANDROID_LOG_H
#定义_ANDROID_LOG_H
/ ******************* *****************
*
*重要提示:
*
*这个文件是Android的一套稳定的系统头的一部分
*揭发了Android NDK(原生开发套件),因为
*平台1.5版
*
*第三方源代码和二进制代码依赖于定义
*这里被冻结在所有UPCOMING平台版本。
*
* - 不要修改ENUMS(除非您添加新的32位值)
* - 不要修改常数或功能宏
* - 请勿更改功能的签名ANY WAY
* - 请勿更改结构的布局和大小
* /
/ *
*支持例程将消息发送到了Android的内核日志缓冲区,
*可以在以后通过“logcat的”实用工具进行访问。
*
*每个日志消息必须有
* - 优先
* - 日志标签
* - 一些文本
*
*标记通常对应于发射所述日志消息的组件,
*并应相当小。
*
*日志消息文本可能会被截断,以不到一个特定实现
*限制(如1023字符)。
*
*请注意,换行符(“/ N”)将被自动添加到您的
*日志消息,如果不是已经存在。这是不可能的发送几个消息
*,并让它们出现在logcat中一行。
*
*请使用日志切勿过量:
*
* - 发送日志消息吃CPU和减慢你的应用程序和
*系统。
*
* - 圆形日志缓冲区是非常小(64KB),发送大量邮件
*可能会蹬从系统的其余部分等重要日志消息。
*
* - 在发布版本,只发送日志消息来解释例外
*条件。
*
*注意:这些功能必须由/system/lib/liblog.so实施
* /
的#include STDARG.H
的#ifdef __cplusplus
外部的“C”{
#ENDIF
/ *
* Android的日志优先级值,以升序的优先顺序。
* /
的typedef枚举android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT,/ *仅供SetMinPriority()* /
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,/ *仅供SetMinPriority();必须是最后一个* /
} android_LogPriority;
/ *
*发送一个简单的字符串日志。
* /
INT __android_log_write(INT PRIO,为const char *标记,为const char *文本);
/ *
*发送一个格式化字符串到日志,使用如printf(FMT,...)
* /
INT __android_log_print(INT PRIO,为const char *标记,为const char * FMT,...)
#如果定义(__ GNUC__)
__attribute__((格式(printf的,3,4)))
#ENDIF
;
/ *
* __android_log_print(的一种变体),需要一个va_list的列表
*额外的参数。
* /
INT __android_log_vprint(INT PRIO,为const char *标记,
为const char * FMT,va_list的AP);
/ *
*登录断言失败和SIGTRAP过程中有机会
*检查它,如果一个调试器附加。它使用了致命的优先级。
* /
无效__android_log_assert(为const char * COND,为const char *标记,
为const char * FMT,...)
#如果定义(__ GNUC__)
__attribute__((不返回的))
__attribute__((格式(printf的,3,4)))
#ENDIF
;
的#ifdef __cplusplus
}
#ENDIF
#ENDIF / * * _ANDROID_LOG_H /
请仔细阅读这个头文件,我们会发现,Android的NDK完全支持JNI本地方法调试。它提供4个函数供我们使用,如下
[CPP]鉴于plaincopy
/ *
*发送一个简单的字符串日志。
* /
INT __android_log_write(INT PRIO,为const char *标记,为const char *文本);
/ *
*发送一个格式化字符串到日志,使用如printf(FMT,...)
* /
INT __android_log_print(INT PRIO,为const char *标记,为const char * FMT,...)
/ *
* __android_log_print(的一种变体),需要一个va_list的列表
*额外的参数。
* /
INT __android_log_vprint(INT PRIO,为const char *标记,
为const char * FMT,va_list的AP);
/ *
*登录断言失败和SIGTRAP过程中有机会
*检查它,如果一个调试器附加。它使用了致命的优先级。
* /
无效__android_log_assert(为const char * COND,为const char *标记,
为const char * FMT,...)
我们可以将本地方法调试信息发送到logcat里。(是不是很爽,以后调试本地方法就不用那么纠结了^_^)
要使用这几个函数,就必须在本地文件中加入如下包含语句
的#include 机器人/ log.h
关于javalogcat和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-04,除非注明,否则均为
原创文章,转载请注明出处。