Qt on Android:将Qt调试信息输出到logcat中

版权全部 foruok 。如需转载敬请注明出处(http://blog.csdn.net/foruok)。

假设你在目标 Android 设备上执行了 Qt on Android 应用,你可能希望看到程序输出的日志信息。 Android SDK 中有 adb 工具,当你连接了目标设备,能够使用 adb logcat 查看 Android 设备上应用输出的日志。

先介绍一下 adb 工具的使用。一般我经常使用下列命令:

  • adb logcat ,查看手机或其它设备上输出的全部日志
  • adb logcat -v time ,让日志带时间信息
  • adb logcat -v time -s Tag 。仅仅显示指定标签的日志信息,同一时候显示日志时间。比方 adb logcat -v time -s qnote 。仅仅显示标签为 qnote 的日志信息;假设你想同一时候过滤多个标签,能够用英文半角逗号分隔标签。如 adb logcat -v time -s qnote,test 。

为了把日志导入 Android 系统的日志系统(一个环形内存日志系统)。我写了一个辅助函数,方便大家使用。

先看头文件 qDebug2Logcat.h :

#ifndef QDEBUG2LOGCAT_H
#define QDEBUG2LOGCAT_H

#ifdef ANDROID
void installLogcatMessageHandler(const char *TAG);
#else
#define installLogcatMessageHandler(TAG)
#endif

#endif // QDEBUG2LOGCAT_H

非常easy,我声明了一个函数 installLogcatMessageHandler ,假设未定义 ANDROID 宏。它就是一个空宏,什么也不干;否则就安装一个消息过滤器。接管 Qt 输出的消息,转发到 Android 的日志系统中。

看源文件 qDebug2Logcat.cpp :

#if defined(ANDROID)
#include "qDebug2Logcat.h"
#include <android/log.h>
#include <QDebug>
#include <QByteArray>

static const char *g_TAG = 0;
static void messageOutput2Logcat(QtMsgType type,
    const QMessageLogContext &context,
    const QString &msg)
{
    int prio = ANDROID_LOG_VERBOSE;
    QByteArray localMsg = msg.toLocal8Bit();
    switch (type) {
    case QtDebugMsg:
        prio = ANDROID_LOG_DEBUG;
        break;
    case QtWarningMsg:
        prio = ANDROID_LOG_WARN;
        break;
    case QtCriticalMsg:
        prio = ANDROID_LOG_INFO;
        break;
    case QtFatalMsg:
        prio = ANDROID_LOG_FATAL;
        abort();
    }
    __android_log_write(prio, g_TAG, localMsg.data());
}

void installLogcatMessageHandler(const char *TAG)
{
    g_TAG = (TAG == 0 ? "QDebug" : TAG);
    qInstallMessageHandler(messageOutput2Logcat);
}

#endif

实现也非常easy,调用 qInstallMessageHandler 把 messageOutput2Logcat 设置为 Qt 应用的默认消息处理器。 messageOutput2Logcat 函数则将 Qt 的调试消息级别映射到 Android 的日志级别上并调用 __android_log_write() 函数将日志信息写入 Android 日志系统。

你能够直接使用这两个文件,增加到你的项目中就可以。

然后在 main() 函数前包括 qDebug2Logcat.h 头文件,在 main() 函数体第一行增加以下的代码:

   installLogcatMessageHandler("yourLogTag");

好了,一切就绪了。

版权全部 foruok 。如需转载敬请注明出处(http://blog.csdn.net/foruok)。

我翻译的大神 BogDan Vatra 的 Qt on Android 系列文章:

我的关于 Qt on Android 的系列文章:

时间: 2024-08-28 21:52:03

Qt on Android:将Qt调试信息输出到logcat中的相关文章

Linux开发基于Qt的Android应用指定调试设备

Linux开发基于Qt的Android应用指定调试设备 最近安装了中外结合的Ubuntu Kylin试试.然后换上了搜狗输入法,这个编码的感觉比微软那个爽多了.开Qt Creator.通过Chromium来访问网页也是飞快的,使用GCC编译的速度也是非常满意的.而在指定安卓设备的时候遇到了一点儿小麻烦:我在将安卓平板电脑连接到电脑的时候,发现adb无法读取,从而Qt Creator的界面看不到我们的真机设备.怎么办呢?记得以前也解决过,但是忘记通过博客记录方法了,这次一定要记下来,以后可不能忘记

监听按钮点击事件的三种方式实现及调试信息输出的三种方式实现

监听按钮点击事件的三种方式实现: 1.匿名内部类 2.外部独立类 3.接口实现 package com.example.button; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View;

利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境

修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建Windows虚拟机),这里有一篇很好的搭建方法:Xen Serial Console,可是光阅读它还不够,中间还会遇到许多问题,本博文介绍一下环境搭建的经过,以及遇到的问题的解决办法,希望对大家有用. 得到 XEN 的 Debug String 需要靠串口(Serial Port)来接收并输出,除了使用 RS232 线缆连接两台机器之外

Qt on Android:Qt Quick 简介

Qt Quick 是 Qt 提供的一种高级用户界面技术,使用它可轻松地为移动和嵌入式设备创建流畅的用户界面.在 Android 设备上, Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你可以用它创建非常炫非常酷非常迷人的界面. Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界面所需的一切东西,包括可视化类型.交互类型.动画.模型与视图.粒子效果与着色效果等等. Qt Quick 提供了两组 API : QML API ,它提供了使用 QML

将Linux下编译的warning警告信息输出到文件中[整理笔记]

Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standard input1 标准输出  stdout = standard output2 标准错误输出  stderr = standard error 而系统默认的stdin,stdout,stderr,都是屏幕,所以,当你执行命令,比如make,后,所输出的信息,都是可以在屏幕上看到的.所以,想要将对应

Android - 手机开发调试无法输出logcat信息 - 未解决

参考链接:Android手机在开发调试时logcat不显示输出信息的解决办法 Android:真机调试,不显示logcat的解决规划 Coolpad 8730L 进入手机工厂模式: Dial:   *#9527*# android 手机获取root 打开USB调试选项,使用一键root工具,e.g:客户端 KingRoot 设置logcat level: 出现如下结果1,断开其他android设备或者模拟器,保持一个手机与电脑连接:2,手机rom需要获取root权限 adb shell su P

[Qt] Release模式下产生调试信息

分两步,设置Qt配置文件,设置VS. https://blog.csdn.net/itas109/article/details/83652387 F:\Qt\Qt5.7.1\5.7\msvc2015_64\mkspecs\common\msvc-desktop.conf QMAKE_CFLAGS_RELEASE = -O2 -MD -Zi QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG https://blog.csdn.net/guo5036040

【转】js调试信息输出小技巧

原文地址:http://blog.csdn.net/jom_ch/article/details/864574 通常我们在做简单的js调试输出的时候习惯用 alert  函数,这个函数也能解决大多数问题,但遇到如循环输出,滚动条状态监控,鼠标位置等场景的时候,alert就相当的不方便了,下面这个函数可以解决这个问题: [javascript] view plaincopy <script type="text/javascript"> function __js_debug

在Linux下调试信息输出自定义颜色字体

Date:2015.5.15  Author:杨正  QQ:1209758756[email protected]   在Linux环境下进行软件开发时,调试是经常做的事情,为了让调试信息更加清晰方便,这里讲解如何输出带有自定义的颜色字体,比如可以自定义输出颜色为红,绿,蓝等,与其他打印信息区分开来. 首先讲解在shell脚本中的应用: 在shell中使用echo命令输出带颜色的文本 名称 echo - 显示一行文本 概要 echo [选项]... [字符串]... 描述 向标准输出输出字符串.