用c语言调用logcat
但是用C调试比较困难,所以要用logcat。
网上关于在原生代码中使用logcat的观点很多,大部分都是欠缺的,有些根本就是错误的。
要使用logcat,首先应该在代码中引入log的头文件。
#包含android/log.h
然后你就可以通过了
_ _ ANDROID _ LOG _ write(ANDROID _ LOG _ ERROR," Tag "," Message ");方法输出到logcat。
有许多日志级别:
ANDROID _ LOG _未知,
安卓_日志_默认,
安卓_日志_详细,
ANDROID_LOG_DEBUG,
安卓_日志_信息,
ANDROID_LOG_WARN,
安卓_日志_错误,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,
这样写完,直接编译的话会报错__android_log_write方法未定义。
在Android.mk文件中,可以指定LOCAL_LDLIBS的一个参数。如果不指定,编译时默认只引入几个重要的库,比如libc。
如果要使用log,就必须引入liblog。
所以需要改成local _ ldlibs:=-l $(sysroot)/usr/lib-llog才能正常编译。
其中-L参数是指定搜索库的路径。
如何使用logcat v time 1找到logcat,窗口-显示视图-logcat。添加成功。
运行你的程序,关于程序运行的信息会显示在logcat上。每条消息包含五个部分,时间,标题空白,pid,标签和消息。
1.时间-执行时间
2.标题空白——表示信息的类型,分为v、d、I、w、e五种类型。
V: verbose,显示所有信息。
d:调试,显示调试信息。
I: Info,显示一般信息。
w:警告,显示警告信息。
错误,显示错误信息。
单击LogCat上用圆圈包围的V、D、I、W、E,更改显示范围。例如,如果选择W,则只能显示警告消息和错误消息。
3.程序运行时的进程号。
4.标签标签
5.消息-进程运行时的一些特定信息。
我们可以在logcat中输出我们想要的信息。给java相关的函数添加调试代码,比如log.i(“这是logcat!”) );
4原木不同层次颜色不同,很容易识别。
Log.v的调试颜色是黑色,任何消息都会输出。
Log.d的输出颜色是蓝色,只输出debug调试。
Log.i的输出是绿色的,是一般的提示性消息信息。
Log.w表示橙色,可以看做是警告。
Log.e为红色,显示错误信息。
5 Logcat命令列表
-b buffer加载可用的日志缓冲区以供查看,如事件和广播。默认值是main。有关详细信息,请参阅查看备用日志缓冲区。
-c清除屏幕上的日志。
-d将日志输出到屏幕。
-f filename指定输出日志信息的文件名,默认情况下是stdout。
-g输出指定的日志缓冲区,并在输出后退出。
-n count设置日志计数的最大数量。默认值为4,需要与-r选项一起使用。
-r kbytes每千字节输出一次日志,默认值为16,需要与-f选项一起使用。
-s将默认过滤级别设置为静默。
-vformat设置日志输入格式,默认为简要格式。有关更多支持的格式,请参见控制日志输出格式。
以下命令在驱动器D: adblogcat *下生成日志文本:e d: \ log.txt。
C语言程序的stderr如何导入logcat? 刚刚看了一下logcat的原理,好像不行,或者做了会比较麻烦。C层不妨用LOGE,LOGD之类的。
如何解决DDMS logcat不输出日志的问题? 如何解决DDMS logcat不输出日志的问题?
10)数学函数:用于数学函数的计算。
11)日期和时间功能:用于日期和时间的转换。
12)过程控制功能:用于过程管理和控制。
13)其他功能:用于其他功能。
以上功能不仅众多,而且需要硬件知识才能使用,要全部掌握需要很长的学习过程。我们应该先掌握一些最基本最常用的功能,然后再逐步深入。由于课时原因,我们只介绍了几个库函数,其余读者可以根据需要查阅相关手册。
还需要指出的是,在C语言中,包括main函数在内的所有函数定义都是并行的。也就是说,在一个函数的函数体中,不能定义另一个函数,也就是不能嵌套。但是函数是允许互相调用的,嵌套调用也是允许的。传统上,调用者被称为主音函数。函数也可以调用自己,这叫递归调用。
主功能就是主功能。它可以调用其他函数,但不允许被其他函数调用。所以C程序的执行总是从主函数开始,调用其他函数后再返回主函数,最后由主函数结束整个程序。一个C源程序必须只有一个主函数,main。
8.2函数定义的一般形式
1.非参数函数的定义形式
类型标识符函数名()
声明部分
句子
}
如何在JNI编程中使用logCat 在android编程的java代码中,我们知道可以使用Log.v等将日志输出到logcat,然后就可以看到日志输出信息了。当然,您也可以在shell中使用ADB NDK。过去,在JNI编程中,很难调试本地接口方法,并且经常通过日志记录将日志输出到文件中。今天,在目录中
/build/platforms/Android-8/arch-arm/usr/include/Android/log . h
在安卓NDK下找到的头文件,打开看看吧。
[CPP]鉴于纯文本
/ *
*版权所有(C)2009 Android开源项目。
*
*根据Apache许可证2.0版(以下简称“许可证”)授权;
*除非符合许可,否则您不能使用此文件。
*您可以从获取许可证副本。
*
*
*
*除非适用法律要求或书面同意,否则软件
*许可证下的分发基于“原样”分发,
*没有担保或任何形式的条件、明示或暗示的担保。
*请参阅许可证语言特定的管理权限和。
*许可证下的限制。
* /
#ifndef的_ANDROID_LOG_H
# definition _ANDROID_LOG_H
/ ******************* *****************
*
*重要说明:
*
*该文件是Android稳定系统头文件的一部分。
*暴露安卓NDK(原生开发套件)是因为
*平台版本1.5
*
*第三方源代码和二进制代码取决于定义。
*在即将推出的平台的所有版本中,这一点已被冻结。
*
*-不要修改枚举(除非添加新的32位值)。
*-不要修改常量或函数宏。
*-不要以任何方式更改函数的签名。
*-不要改变结构的布局和尺寸。
* /
/ *
*支持例程向Android的内核日志缓冲区发送消息。
*以后可以通过“logcat”实用程序访问它。
*
*每个日志消息必须有
*-优先级
*-日志标签
*-一些文本
*
*标签通常对应于发送日志消息的组件,
*并且应该很小。
*
*日志消息的文本可能会根据具体实施情况而被截断。
*限制(如1023个字符)。
*
*请注意,换行符("/N ")将自动添加到您的。
*日志消息,如果它不存在的话。发几条消息是不可能的。
*,并使它们在logcat中出现在一行中。
*
*请使用日志,不要过度使用:
*
*-发送日志消息来消耗CPU并降低应用程序的速度
*系统。
*
*-循环日志缓冲区非常小(64KB),并且发送大量邮件。
*重要的日志消息可能会从系统的其余部分推送。
*
*-在发布版本中,仅发送日志消息来解释异常。
*条件。
*
*注意:这些函数必须由/system/lib/librog.so实现。
* /
# includestdarg.h
#ifdef __cplusplus of
外部“c”(
#ENDIF
/ *
* Android日志优先级值,按优先级升序排列。
* /
Typedef枚举android_LogPriority {
ANDROID_LOG_UNKNOWN = 0
ANDROID_LOG_DEFAULT,/* for SetMinPriority()*/
安卓_日志_详细,
ANDROID_LOG_DEBUG,
安卓_日志_信息,
ANDROID_LOG_WARN,
安卓_日志_错误,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,/* SetMinPriority()only;必须是最后一个*/
} android _ LogPriority
/ *
*发送一个简单的字符串日志。
* /
INT __android_log_write(INT PRIO,用const char *标记,用const char * text标记);
/ *
*发送一个格式化的字符串到日志,使用如printf(FMT、...)
* /
INT __android_log_print(INT PRIO,标有const char *,const char * FMT...)
#如果你定义(__ GNUC__)
__attribute__((格式(of 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 * tag,
对于常数char * FMT,...)
#如果你定义(__ GNUC__)
__attribute__((未返回))
__attribute__((格式(of printf,3,4)))
#ENDIF
;
#ifdef __cplusplus of
}
#ENDIF
#ENDIF / * * _ANDROID_LOG_H /
请仔细阅读这个头文件,我们会发现Android的NDK完全支持JNI本地方法调试。它提供了四个函数供我们使用,如下所示
[CPP]鉴于纯文本
/ *
*发送一个简单的字符串日志。
* /
INT __android_log_write(INT PRIO,用const char *标记,用const char * text标记);
/ *
*发送一个格式化的字符串到日志,使用如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 * tag,
对于常数char * FMT,...)
我们可以向logcat发送本地方法调试信息。(是不是很酷,以后就不用纠结调试本地方法了_)
要使用这些函数,必须将以下包含语句添加到本地文件中。
# includeRobot/log.h
最后更新于 2023-10-09 00:46:20 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章