用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

相关文章

发表新评论