CSerialPort教程4.3.x (8) - CSerialPort调试模式的使用

CSerialPort教程4.3.x (8) - CSerialPort调试模式的使用

前言

CSerialPort项目是一个基于C/C++的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写,同时还支持C#, Java, Python, Node.js等。

CSerialPort项目的开源协议自 V3.0.0.171216 版本后采用GNU Lesser General Public License v3.0

为了让开发者更好的使用CSerialPort进行开发,特编写基于4.3.x版本的CSerialPort教程系列。

CSerialPort项目地址:

本文将介绍CSerialPort如何输出详细调试信息及日志。

1. 开启CSerialPort输出详细调试信息及日志

默认情况下,CSerialPort不会输出详细调试信息及日志。

可以通过宏定义CSERIALPORT_DEBUG来开启输出调试信息及日志(v4.2.2及以后版本支持)。

可以输出串口初始化、发送、接收、写缓冲区等详细调试信息。

相关代码位于include\CSerialPort\SerialPort_global.h

复制代码
#ifdef CSERIALPORT_DEBUG
#include <stdio.h>
#include <string.h> // strrchr
#ifdef _WIN32
#ifndef __func__
#define __func__ __FUNCTION__
#endif
#define LOG_INFO(format, ...) printf("[CSERIALPORT_DEBUG] %s - " format "\n", __func__, ##__VA_ARGS__)
#else
#define LOG_INFO(format, ...) printf("[CSERIALPORT_DEBUG] %s - " format "\n", __func__, ##__VA_ARGS__)
#endif
#else
#define LOG_INFO(format, ...)
#endif

2. 控制台中查看CSerialPort详细调试信息

控制台示例程序位于examples\CommNoGui,通过在CMakeLists.txt中增加宏定义CSERIALPORT_DEBUG开启输出调试信息及日志。

复制代码
add_definitions(-DCSERIALPORT_DEBUG)

结果:

复制代码
Version: https://github.com/itas109/CSerialPort - V4.3.0.230215

availableFriendlyPorts:
1 - COM1 USB-SERIAL CH340  USB\VID_1A86&PID_7523&REV_0264

Please Input The Index Of Port(1 - 1)
1
Port Name: COM1
[CSERIALPORT_DEBUG] CSerialPortWinBase::openPort - portName: COM1, baudRate: 9600, dataBit: 8, parity: 0, stopBit: 0, flowControl: 0, mode: async, readBufferSize:4096(4096), readIntervalTimeoutMS: 0, minByteReadNotify: 1
[CSERIALPORT_DEBUG] CSerialPortWinBase::openPort - open COM1. code: 0, message: success
Open COM1 Success. Code: 0, Message: success
[CSERIALPORT_DEBUG] CSerialPortWinBase::writeData - write. len: 5, hex(top100): 3132333435
[CSERIALPORT_DEBUG] CSerialPortWinBase::writeData - write. len: 7, hex(top100): 69746173313039
[CSERIALPORT_DEBUG] CSerialPortWinBase::commThreadMonitor - write buffer(usedLen 12). len: 12, hex(top100): 313233343569746173313039
[CSERIALPORT_DEBUG] CSerialPortWinBase::commThreadMonitor - onReadEvent. portName: COM1, readLen: 12
[CSERIALPORT_DEBUG] CSerialPortWinBase::readData - read. len: 12, hex(top100): 313233343569746173313039
COM1 - Count: 1, Length: 12, Str: 12345itas109, Hex: 0x31 0x32 0x33 0x34 0x35 0x69 0x74 0x61 0x73 0x31 0x30 0x39

3. MFC等GUI中查看CSerialPort详细调试信息

有GUI的程序不能直接查看控制台输出的信息,这里我们使用重定向的方式将控制台信息输出到日志。

这里以examples\CommMFC为例。

CMakeLists.txt中增加宏定义CSERIALPORT_DEBUG开启输出调试信息及日志。

复制代码
add_definitions(-DCSERIALPORT_DEBUG)

控制台中以重定向的方式运行CommMFC.exe

复制代码
CommMFC.exe > CSerialPort.log

正常操作后,关闭CommMFC.exe。

结果:

CSerialPort.log

复制代码
[CSERIALPORT_DEBUG] CSerialPortWinBase::openPort - portName: COM1, baudRate: 9600, dataBit: 8, parity: 0, stopBit: 0, flowControl: 0, mode: async, readBufferSize:4096(4096), readIntervalTimeoutMS: 0, minByteReadNotify: 1
[CSERIALPORT_DEBUG] CSerialPortWinBase::openPort - open COM1. code: 0, message: success
[CSERIALPORT_DEBUG] CSerialPortWinBase::writeData - write. len: 29, hex(top100): 68747470733A2F2F626C6F672E6373646E2E6E65742F69746173313039
[CSERIALPORT_DEBUG] CSerialPortWinBase::commThreadMonitor - write buffer(usedLen 29). len: 29, hex(top100): 68747470733A2F2F626C6F672E6373646E2E6E65742F69746173313039
[CSERIALPORT_DEBUG] CSerialPortWinBase::commThreadMonitor - onReadEvent. portName: COM1, readLen: 29
[CSERIALPORT_DEBUG] CSerialPortWinBase::readData - read. len: 29, hex(top100): 68747470733A2F2F626C6F672E6373646E2E6E65742F69746173313039

License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:

  1. https://github.com/itas109/CSerialPort
  2. https://gitee.com/itas109/CSerialPort
  3. https://blog.csdn.net/itas109
相关推荐
波特率1152002 天前
C++当中is-a(继承)与has-a(成员对象)的辨析与使用指南(包含实际工程当中的使用示例)
c++·ros·串口通信
’长谷深风‘3 天前
51单片机入门(3:串口通信)
单片机·嵌入式硬件·51单片机·串口·串口通信
小贺儿开发4 天前
【Arduino与Unity交互探究】01 摇杆模块
科技·unity·游戏引擎·arduino·串口通信·摇杆·硬件交互
蜡台11 天前
VSCode 配置PHP开发环境
ide·vscode·php·debug·launch.json
爱吃的小肥羊12 天前
Claude Code新功能:帮你找bug,但每次要收你20美元!
debug
普中科技13 天前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 22 章 串口通信实验
单片机·嵌入式硬件·51单片机·串口通信·开发板·普中科技
MrBread25 天前
微任务链式派生阻塞渲染
前端·debug
php551 个月前
嵌入式串口通信中的双缓冲机制:高效处理高速数据流的实战解析
串口通信·嵌入式系统·数据帧·双缓冲机制
冬奇Lab1 个月前
应用异常退出实战分析:一次"幽灵杀手"引发的车载系统故障排查
android·性能优化·debug
yuki_uix1 个月前
为什么我的 Auth Token 藏在了 Network 面板的 Doc 里?
前端·python·debug