准备:
安装log4c库, sudo apt-get install liblog4c-dev liblog4c-doc
别的系统请百度/GOOGLE找相关编译安装当。log4c官网:http://log4c.sourceforge.net/index.html
文件:
log.h log.c 自己将log4c重新封装的函数
test-log.c 测试用的主函数
log4crc 配置文件(xml,照着写就行)
//log.h
[cpp] view plain copy
#ifndef _LOG_H_
#define _LOG_H_
#include <string.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include "log4c.h"
#ifdef __cplusplus
}
#endif
#define LOG_PRI_ERROR LOG4C_PRIORITY_ERROR
#define LOG_PRI_WARNLOG4C_PRIORITY_WARN
#define LOG_PRI_NOTICE LOG4C_PRIORITY_NOTICE
#define LOG_PRI_DEBUG LOG4C_PRIORITY_DEBUG
#define LOG_PRI_TRACE LOG4C_PRIORITY_TRACE
extern int log_open(const char *category)
extern void log_message(int priority ,const char* fmt, ...)
extern void log_trace(const char *file , int line , const char *func, const char *fmt ,...)
extern int log_close()
#define LOG_ERROR(fmt , args...)\
log_message(LOG_PRI_ERROR, fmt, ##args)
#define LOG_WARN(fmt, args...) \
log_message(LOG_PRI_WARN, fmt , ##args)
#define LOG_NOTICE(fmt , args...) \
log_message(LOG_PRI_NOTICE, fmt , ##args)
#define LOG_DEBUG(fmt , args...)\
log_message(LOG_PRI_DEBUG, fmt , ##args)
#define LOG_TRACE(fmt,args...) \
log_trace(__FILE__ , __LINE__ , __FUNCTION__ , fmt ,## args)
#endif
//log.c
[cpp] view plain copy
#include <log4c.h>
#include <assert.h>
#include "log.h"
static log4c_category_t *log_category = NULL
int log_open(const char *category)
{
if (log4c_init() == 1)
{
return -1
}
log_category = log4c_category_get(category)
return 0
}
void log_message(int priority , const char *fmt , ...)
{
va_list ap
assert(log_category != NULL)
va_start(ap, fmt)
log4c_category_vlog(log_category , priority , fmt , ap)
va_end(ap)
}
void log_trace(const char *file, int line, const char *fun,
const char *fmt , ...)
{
char new_fmt[2048]
const char *head_fmt = "[file:%s, line:%d, function:%s]"
va_list ap
int n
assert(log_category != NULL)
n = sprintf(new_fmt, head_fmt , file , line , fun)
strcat(new_fmt + n , fmt)
va_start(ap , fmt)
log4c_category_vlog(log_category , LOG4C_PRIORITY_TRACE, new_fmt , ap)
va_end(ap)
}
int log_close()
{
return (log4c_fini())
}
//test-log.c
[cpp] view plain copy
#include <stdio.h>
#include "log.h"
int main(void)
{
log_open("<span style="color: rgb(51, 51, 51)line-height: 20px">mycat</span>")
LOG_TRACE("trace")
LOG_ERROR("error")
LOG_WARN("warn")
LOG_NOTICE("notice")
LOG_DEBUG("hello log4c!")
log_close()
return 0
}
//配置文件,默认名为log4crc
[html] view plain copy
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE log4c SYSTEM "">
<log4c version="1.2.1">
<config>
<bufsize>0</bufsize>
<debug level="2"/>
<nocleanup>0</nocleanup>
<reread>1</reread>
</config>
<!-- root category ========================================= -->
<category name="root" priority="notice"/>
<category name="mycat" priority="debug" appender="stdout"/>
<!-- default appenders ===================================== -->
<appender name="stdout" type="stream" layout="basic"/>
<appender name="stderr" type="stream" layout="dated"/>
<appender name="syslog" type="syslog" layout="basic"/>
<!-- default layouts ======================================= -->
<layout name="basic" type="basic"/>
<layout name="dated" type="dated"/>
</log4c>
编译命令:
[python] view plain copy
gcc test-log.c log.c -o test-log -llog4c
运行效果
./test-log
[stdout] TRACEmycat - [file:test-log.c, line:7, function:main]trace
[stdout] ERRORmycat - error
[stdout] WARN mycat - warn
[stdout] NOTICE mycat - notice
[stdout] DEBUGmycat - hello log4c!
包含设备日志,堆栈跟踪和其他诊断信息,可帮助您查找和修复应用中的错误。
安卓bugreport主要用于分析手机的状态。其包含: main log , kernel log ,cpuinfo等信息。bugreport是一个可执行文件,编译后的路径为system/bin/bugreport,源码位于framework/native/cmds/bugreport。其核心在于启动dumpsys服务。bugreport同dumpstate服务建立socket通信(建立连接20次,超时3min无数据等容错)。连接之后,将接收到的数据定向到文件中。
因此我们看到的bugreport数据均来自dumpstate。
bugreport通过socket与dumpstate服务建立通信,在dumpstate.cpp中的dumpstate()方法完成核心功能。分别输出: current log、 last log、 vm trace、 dumpsys、 system info
其详细内容主要有: 系统build及运行时长等信息、 内存和CPU进程的信息、 kernel log、 system log、 radio log、 event log 等等。实际来说,bugreport中显示的大部分为信息,都有对应的命令方式可以获取。bugreport只是作为一个在不打扰用户的前提下执行的一套命令集合。
1). main_log 记录手机android上层app以及framework相关活动的log,比如你写的app打印的log,就在这里面
2). events_log 主要是ActivityManager、powerManager等相关的log
3). kernel Log 驱动相关的log
Logcat是内置在Android系统中的一个可执行工具,用于转储系统消息日志,其中包括设备引发错误时的堆栈追踪以及从您的应用当使用 Log 类编写的消息。可以在主机上通过adb logcat命令来查看模拟机上日志信息。
Android tcpdump是命令行数据包捕获实用程序。它可以捕获来自您的Wi-Fi连接,蜂窝连接以及您在android设备上可能具有的任何其他网络连接的数据包
modem 是手机里负责搜网和sim卡数据 *** 作底层模块,每个手机都有,md log 用于分析掉网、掉话、无信号等问题
系统崩溃时留下的遗言,怎么死的,死哪了,死的多惨。
当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash(崩溃) 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。
6. netlog 网络相关
看网络链接情况,抓取网络包等等
7. QXDM(the Qualcomm eXtensible Diagnostic Monitor)高通可扩展诊断监视器
该工具适用于拥有使用Qualcomm ASIC和试用硬件的设备的人,并允许他们测试,评估和潜在诊断其移动设备的RF性能问题。通常使用它来促进这些设备的产品开发。
使用该软件,用户可以查看他们的移动设备发出的所有信令消息,因为该软件会生成它们的日志。这些日志也可以通过软件进行注释。可以将网络和电话参数的任何混合添加到屏幕,并且允许用户在使用其参数时使用复杂的公式。该程序还实时生成大量统计数据,以便用户可以更好地识别潜在的性能问题。用户可以访问Markov统计信息,Mux统计信息,RLP统计信息,块错误率,移动性管理数据,寻呼和访问统计信息,前向和反向链路统计信息等等。该程序还为用户提供了便携式设备信号的图形显示。该程序与Windows *** 作系统兼容。
8. init Log(init进程log)
9. Crashlog(崩溃日志)
是要调用对数函数求值吗这个嘛,你可以现在源文件开头处加一个数学库函数头(#include<math.h>),,
然后就可以在你需要调用的位置直接的使用,例如
int a=100;
int b;
b=log(a);
printf(“%d”,b);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)