据说有为嵌入式提供的 QT Debug 手段,但是目前还没发现,所以想到了这个笨办法。有更好思路的可以推荐。

该思路是基于 QDebug() 。因为 QT 提供了重写 QT msg 处理方法的接口 qInstallMsgHandler(),所以,我们可以利用该接口把 QtDebugMsg,QtWarningMsg,QtCriticalMsg,QtFatalMsg 等信息按照指定的方式进行输出,而不是输出到默认的“标准输出”。之前使用该方法将所有调试信息全部输出到“debug.log”文件,但是,存在有时候忘记删除该接口,导致设备 flash 被 log 文件塞满的隐患,所以,今天尝试了使用 UDP 来作为 msg 输出手段。

功能已初步完成,在 A 侧设备内部通过 UDP 输出调试信息,在 B 侧使用任意 UDP 客户端监听并显示。测试代码,以及接收用的 Python 代码见下面。

#include    <QtCore/QCoreApplication>
#include <QDebug>
#include <QtNetwork/QUdpSocket>
#include <QHostAddress>
#include <QDateTime>
#include <iostream> #define _TIME_ qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")) static void networkLog(QtMsgType type, const char* msg)
{
QString qstrTest;
switch (type)
{
case QtDebugMsg:
qstrTest = QString("%1: %2").arg(_TIME_ , msg);
break;
case QtWarningMsg:
qstrTest = QString("%1: %2").arg(_TIME_ , msg);
break;
case QtCriticalMsg:
qstrTest = QString("%1: %2").arg(_TIME_ , msg);
break;
case QtFatalMsg:
qstrTest = QString("%1: %2").arg(_TIME_ , msg);
exit();
}
QUdpSocket *udpSocket = new QUdpSocket();
//udpSocket->bind( QHostAddress("192.168.100.14"), 11334 ); udpSocket->bind(QHostAddress(), , QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint); QHostAddress hostaddr;
hostaddr.setAddress( "255.255.255.255" );
udpSocket->writeDatagram( qstrTest.toAscii(), hostaddr, ); udpSocket->close();
} int
main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); qInstallMsgHandler(networkLog); qDebug()<<"qDebug(), hello QT!"; printf("printf, hello QT! \n"); while()
{
qDebug()<<"it's a test!"; std::cout<<"cout, hello QT!"<<std::endl; ::sleep();
} return a.exec();
}

这里因为是用了 UDP ,所以,还需要在 Project 文件中加入对 Socket 的支持,所以顺便贴出使用的 project 文件。

QT  += network

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . # Input
SOURCES += main.cpp

该 QT 工程编译之后,运行,其中的 qDebug() 信息即被使用 UDP 在局域网内进行广播,广播目的端口是 12345。所以,我们在局域网内某电脑打开 12345 端口监听即可(目前这样写,每次发送的端口号都在变,所以,当接收端指定发送端口时,客户端会“假死”;比如NetCat,它会和第一个发包给它的“地址-端口”绑定,那么他就没法收以后的包了)。使用下面的 Python 脚本可以正常接收。

#!/usr/bin/env python

import socket
from struct import * s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", 12345)) while True:
data, addr = s.recvfrom(1024) print addr,data

看到如下显示:

./swDebug.py
('192.168.100.16', 59998) 2015-11-24 17:17:24: qDebug(), hello QT!
('192.168.100.16', 48415) 2015-11-24 17:17:24: it's a test!
('192.168.100.16', 34366) 2015-11-24 17:17:25: it's a test!
('192.168.100.16', 55790) 2015-11-24 17:17:26: it's a test!
('192.168.100.16', 35438) 2015-11-24 17:17:27: it's a test!
('192.168.100.16', 41735) 2015-11-24 17:17:28: it's a test!
('192.168.100.16', 48207) 2015-11-24 17:17:29: it's a test!

嵌入式环境下通过 UDP 链接来调试 QT 程序的更多相关文章

  1. Mac环境下PHPstorm配置xdebug开发调试web程序

    一.安装PHP的xdebug扩展 安装xdebug(技巧,为了找到适配的版本,让xdebug网站根据phpinfo()函数输出分析找到对应的方法及安装步骤:如果安装了多个PHP版本的话,尽量用phpi ...

  2. 在SoCEDS环境下编译和更新preloader和uboot程序的方法

    在SoCEDS环境下编译和更新preloader和uboot程序的方法   前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...

  3. VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...

  4. 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...

  5. 【最详细最完整】在Linux 下如何打包免安装的QT程序?

    在Linux 下如何打包免安装的QT程序? 版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! ...

  6. 交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编 ...

  7. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  8. 【swoole】如何在docker+swoole环境下测试udp服务

    前面几篇文章讲了使用 docker+swoole 环境来测试tcp服务以及如何测试,但是当我开始学习udp服务那块的时候,发现使用原来的方式在 docker+swoole 环境下行不通啦,后来发现如果 ...

  9. win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://goldlion.blog.51cto.com/4127613/834075 引子 ...

随机推荐

  1. R统计分析处理

    [翻译]Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么? 阅读目录 0.前言 1.集成开发环境 2.语法 3.数据操作 4.图形显示 5.HTML部件 ...

  2. 毫米转换为PX

    公式:毫米数/25.4*你的电脑的DPI,win7 DPI  100%缩放为96,125%为120,150%为144,200%为192 象素数 / DPI = 英寸数 英寸数 * 25.4 = 毫米数

  3. myeclipse中发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

    出现这个问题的原因是jar包版本不统一,解决方法如下: 我在项目导入了jar包 与myeclipse自带jar冲突了 删除Java EE 5 Libraries/javaee.jar/mail里的包有 ...

  4. JavaScript的一些知识碎片(1)

    打算把使用Javascript的水平从child提升到小学毕业,近期会持续记录一些知识点. javascript的引用机制:只要一个对象赋值为另一个对象,就建立了引用.一旦建立了引用,对象们就公用一块 ...

  5. css3实践之摩天轮式图片轮播+3D正方体+3D标签云(perspective、transform-style、perspective-origin)

    本文主要通过摩天轮式图片轮播的例子来讲解与css3 3D有关的一些属性. demo预览: 摩天轮式图片轮播(貌似没兼容360 最好用chrome) 3D正方体(chrome only) 3D标签云(c ...

  6. 我的开发框架之ORM框架

    今天我想分享一下我自己的ORM框架,虽然谈不是很好,但我个人认为还是蛮好用的,跟大家分享交流一下. 首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上, ...

  7. 《深入理解Spark:核心思想与源码分析》(前言及第1章)

    自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售 ...

  8. 4.5你太黑了,不带这么玩TypeForwardedTo的

    话说最近好不容易把framework 4.0的metadata信息都能全部抽出了,结果换4.5挂了...framework那帮人在4.5里面用了些什么诡异的玩意? 结果一看4.5的部分field用了t ...

  9. Feuding Families and Former Friends: Unsupervised Learning for Dynamic Fictional Relationships-Naacl 2016-20160422

    1.Information publication:-Naacl 2016 2.What 根据小说中的人物描述,a)在每个时间段给出,人物关系的描述的概率分布,b)从时间轴上看出关系的变化轨迹,提出模 ...

  10. java中的URLConnection

    *URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection.另外一个重要的类是URL,通常URL可以通过传给构造器一个Strin ...