远程打印调试信息工具LogPrintf

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

1.   功能概述

LogPrintf工具为用户提供了在本地计算机上监视远程设备调试信息的能力。通常情况下,可以在本地计算机上使用telnet程序,用它连接到服务器;但是在卫星网络的条件下,TCP连接质量较低,telnet连接很容易断开,影响调试体验。当服务器程序启动之后,各个待调试的网络设备的调试信息都会被收集到服务器。客户端程序启动时自动地在服务器上尝试注册,注册成功后调试信息会通过UDP协议传回本地,就像直接在服务器观察打印信息一样。本工具使用者可以在本地程序中修改配置文件来改变端口参数。

2.   程序结构框图

1) 待调试设备上嵌入LogPrintf()函数

        待调试设备每次调用LogPrintf()时,都会把打印信息通过UDP协议向服务器端发送。而且可以设置调试信息的type和level

2) 服务器端程序分为device&client监听模块、发送模块:

        Source监听模块监听在固定的端口13013,监听两类信息,其中A来自device,B来自Client:

A. 等待调试设备发送的调试信息,这些信息会被打上type和level标签。根据标签信息,以及Client注册情况,服务器会调用发送模块,选择性转发调试信息给各个客户端。

B.接收来自客户端的控制信息。包括注册、查询、删除操作

a.      客户端注册时,会带有两个参数numObj、ObjList,分别是客户端监听对象的个数和客户端监听对象。其中客户端监听对象是一个三元结构:<监听type,监听level,监听IP>。控制模块接受了这次注册后,会维护一个Client信息列表,作为服务器过滤、转发的依据。这个列表中每个客户端也包含一个定时器,定时器结束时则从列表中删除该客户端。最后调用发送模块返回注册操作结果。

b.      客户端查询时,监听模块从客户端信息列表中查询,并返回结果。

c.      客户端删除时,监听模块更新客户端信息列表,并返回结果

发送模块负责向客户端发送控制信息和普通调试信息,通过字段的不同取值来区分控制信息和普通调试信息。服务器端在内存维护一个客户端信息列表,每项包括1.监听主体2.定时器3.监听目标列表(包括目标IP、目标type、目标level)。监听目标列表是过滤普通调试信息的依据。

3) 客户端程序分为监听模块、server请求模块、本地输出模块

监听模块监听用户的键盘输入,以及服务器端的控制信息输入:

a.      程序启动或者用户输入注册命令时,监听模块尝试出一个可行的端口,并且通过server请求模块向服务器端申请,成功后可以得到返回结果,在本地打印结果。如果注册成功,则开始监听申请成功的端口,并创建一个定时器,定时器结束后再次向服务器注册

b.      用户输入查询命令时,通过server请求模块向服务器查询。

c.      用户输入关闭命令时,通过server请求模块向服务器申请注销。

d.      当监听的socket收到来自server的控制信息或者普通调试信息时,在本地打印。

Server请求模块根据不同的请求,向server发送不同格式的信令。

本地打印模块负责把收到的控制信息和普通调试信息打印。


3.   主要过程流程图

1) 初始化过程

        初始化过程中,客户端首先尝试一个可行的端口,然后向服务器端申请,服务器端更新后,设置定时器,向客户端返回本次初始化的结果。客户端收到结果后,也启动一个定时器。服务器端在内存维护一个客户端信息列表,每项包括1.监听主体、2.定时器、3.监听目标列表(包括目标IP、目标type、目标level)

2) 客户端关闭过程


        客户端关闭时,先通过端口通知服务器端注销这个地址,服务器端注销成功后,会更新地址列表,并返回操作结果。最后客户端再关闭socket,完成整个关闭过程。


1.   外部通信接口

1) Devices => Server

MSG

TYPE

LEVEL

STRING

1B

1B

1B

LENGTH

MSG=0代表这段消息是普通的调试信息,待调试设备向服务器发送打标后的调试信息,标志包括类型TYPE和级别LEVEL。

2) Client => Server

MSG=1代表这段消息是控制信息,控制信息又分为以下三类:

a.      申请(OP=0x00)

MSG

OP

PORT

NUM

TYPE0

LEVEL0

IP0

TYPE1

LEVEL1

IP1

……

 

1B

1B

2B

2B

1B

1B

4B

1B

1B

4B

 

 

申请时OP=0x00,num表示客户端的监听目标的个数,每个监听目标都包含三项:监听类型、监听级别、监听IP地址。其中监听类型以独热方式编码,可以通过掩码选择多个类型;其中的监听级别,表示需要监听的最低级别。

b.      查询(OP=0x10)和删除(OP=0x20)</

使用printf构建log模块 为何要构建log模块 在项目中,想要输出: 1 不同等级/类型的log输出:debug/information/warning/error/fatal error/ 2 log输出包含:log等级/类型、log时间、log所在的函数 不同等级/类型的log输出我希望输出不同的颜色: debug/information=green warning=yellow error/fatal error=red 不同等级/类型的log输出我希望程序可以做出应有的动作: debug/informa 阅读详情

相关推荐

RML2016.10a (CNN、LSTM、CNN-LSTM、CNN-LSTM-Multi-head-attention, TensorFlow)

RML2016.10a (CNN、LSTM、CNN-LSTM、CNN-LSTM-Multi-head-attention, TensorFlow) 包含所有数据和代码,支持一键运行(jupyter)

qq_40999533的博客 1449

DSP中LOG_printf()和printf()区别

        在开发的时候通常需要使用printf()来显示当前状态。但是printf()是非常花费时间的函数 而且不具有实时性。因为DSP需要对显示的数据进行分析,整理成合适的显示格式,并调用输出显示模块。所以在一个实时性要求很高的应用中,对printf()的调用可能会使系统根本无法满足实时要求。在DSP/BIOS中引入了一个相应的函数LOG_printf()。该函数是LOG对象的一个方法(或...

坚持 4155

使用sysbench对Oracle做基准测试(-) 安装篇

sysbench是一款开源的多线程性能测试工具, 可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。

道行尚浅(老道)的博客 7791

DSP日志打印 LOG_printf

LOG_printf依托BIOS环境,需要引用下列头文件: #include <std.h> #include <log.h> 并且,要在.tcf环境中添加一个LOG对象,如trace,然后代码如下: extern LOG_Objtrace; main() { unsigned int...

weixin_34220179的博客 957

总结几种log打印printf函数的宏定义

总结几种log打印printf函数的宏定义 #include <stdio.h> #define lU_DEBUG_PREFIX "##########" #define LU_DEBUG_CMD 0x01 #define LU_DEBUG_DATA 0x02 #define LU_DEBUG_ERROR 0x04 #define LU_PRINTF_cmd(msg...) ...

qq_37871669的博客 760

C语言编写log文件以及printf函数实现原理

C语言编写log文件以及printf函数实现原理         在系统调试中通过在文件系统里写log日志是一个长期分析系统运行的好方法。做系统调试应该养成这个习惯,可以方便的监控系统可能出现的各种异常。        今天学习下log日志的书写方法。Log一般可以分为以下4种:        ERROR(错误):此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。         WA

DanielLee_ustb的专栏 5690

go语言日志实现详解(打印日志、日志写入文件和日志切割)

log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。 package main import ( "log" ) func main() {

不定时分享最优质的网络技术与教程,满满的干货。 5157

android___android_log_print打印函数__源代码

转自:http://www.netmite.com/android/mydroid/system/core/liblog/logd_write.c/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License");

蓝松SDK 4万+

LOG 日志级别,标签输出, 根据标签控制输出日志级别 , 自定义printf输出

功能: 1. 错误,警告, 信息,调试,四个等级输出, 四种颜色区别。 建议使用putty调试 2.标签独立划分等级, 每个标签可单独定义输出等级,控制输出、不输出 3.十进制/十六进制数组输出 4.自定义printf , 标准C库printf输出, 宏切换。 输出效果: 函数说明: //tag为输出标签, 必须为静态字符或全局字符 //level 为对应标签输出等级 LOG_...

kyzb002的专栏 1938

printf log管理终极版本——printf字体颜色格式与log级别设置

1.printf字体设置 在平常的调试中,printf字体格式与颜色都是默认一致的。 如果可以根据log信息的重要程度,配以不同的颜色与格式,可以很方便的查找到要点。 printf(&amp;amp;quot;\033[显示格式;字体颜色;背景颜色m 字符串 \033[0m&amp;amp;quot; ); 第一个\033是设置随后的字体格式,结尾处的\033[0m是恢复默认值。 转义序列是以 ESC 开头,用 \033 完成相同的工作(ESC 的...

Aero's WorkSpace. 2324

golang标准库之log日志

log包中提供了func New(out io.Writer, prefix string, flag int) *Logger函数来实现自定义logger。从效果上来看,就是标准日志配置、日志前缀配置、日志输出位置配置整合到一个函数中,使日志配置不在那么繁琐。= nil {

qiao_qing的博客 2211

Hello Go(十一)、Go语言常用标准库一

一、log 1、log模块简介 Go语言中log模块用于在程序中输出日志。 log模块提供了三类日志输出接口,Print、Fatal和Panic。Print是普通输出;Fatal是在执行完Print后,执行 os.Exit(1);Panic是在执行完Print后调用panic()方法。log模块对每一类接口其提供了3中调用方式,分别是"Xxxx、 Xxxxln、Xxxxf"。 2、log.Print接口 log.Print类接口包括log.Print、log.Println、log.Printf,

天山老妖 1276

Golang中使用log(一):Golang 标准库提供的Log

Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路)。

linuxshadow的专栏 1万+

printf输出彩色log

在软件开发过程中,log调试是一个非常重要的排查问题的手段,log的输出结果可以帮助工程师验证其软件逻辑与执行结果是否一致。所以一个有彩色效果的log输出,可以帮到工程师更好的定位问题所在,并且利用特定的。格式:printf(“\033[是设置随后的字体格式,结尾处的。可以定位到问题出现在哪一行。

我只会点灯的博客 467

syslog详解及配置远程发送日志和远程日志分类

1、日志协议syslog 1.1、syslog简介 完善的日志分析系统应该能够通过多种协议(包括syslog等)进行日志采集并对日志分析,因此日志分析系统首先需要实现对多种日志协议的解析。其次,需要对收集到的海量日志信息进行分析,再利用数据挖掘技术,发现隐藏再日志里面的安全问题。 Syslog再UNIX系统中应用非常广泛,它是一种标准协议,负责记录系统事件的一个后台程序,记录内容包括核心、系统程序的运行情况及所发生的事件。Syslog协议使用UDP作为传输协议,通过514端口通信,Syslog使用syslo

huangbaokang的博客 4万+

DebugView 使用技巧

From:https://blog.csdn.net/bcbobo21cn/article/details/52401087 DbgView简介 1、什么是 DebugView ? DebugView是一个系统调试信息输出的捕获工具。debugview是 Sysinternals 公司的系列调试工具。debugview 可以捕获程序中由 TRACE(debug版本)...

freeking101的博客 2万+

Tda4 IPC

【代码】Tda4 IPC。

jlgcumt的博客 882

【免费下载】 TSC打印机设置工具DiagnosticTool1.63:简化条码打印机配置,提升工作效率

在众多条码打印机的管理工具中,TSC打印机设置工具(DiagnosticTool)1.63以其独特的设计和实用的功能脱颖而出。本文将详细介绍这款工具的核心功能、技术分析、应用场景和项目特点,帮助您更好地了解并使用这一优秀开源项目。 ## 项目介绍 TSC打印机设置工具(DiagnosticTool)1.63是一款专为TSC型号条码打印机设计的工具。它集成了打印机设定、档案管理、点阵字工具和通讯...

gitblog_06712的博客 609
下一篇: Hadoop集群安装报告
Hchnr
博客等级 码龄12年 4粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值