PXView_v1.6.0
·
101 commits
to main
since this release
PXView V1.6.0 版本更新日志
发布日期:2026 年 9 月 4 日
版本核心目标:修复多标签页设备错乱与配置覆盖缺陷;Linux 分发全面转向自解压安装器体系;提升测试与构建确定性。
升级说明(与Linux 用户有关)
分发方式变更:因为AppImage只能有一个启动入口,不能用点击的方式分别启动PXView和Agent应用,因此废弃该分发方式,改用自解压 .run 安装器
- 权限要求:因涉及系统目录写入与 udev 规则部署,安装器在解包前会强制预检 Root 权限,因此需要使用
sudo执行安装(例如:sudo ./PXView-Linux-x86_64-Installer-1.6.0.run)。 - 安装路径:统一安装至
/opt/PXView,自动集成 udev 规则、桌面图标、.desktop菜单、CLI 封装及卸载脚本。 - 权限闭环:USB 设备权限(udev 规则)由安装器全权接管,不再提供独立的 udev 规则压缩包。
- 依赖隔离:安装包仅内嵌 Qt、GCC、Python、libsigrok 等运行时;不打包 WebKitGTK/GTK/X11/Wayland 等系统桌面栈,避免 ABI 混搭导致窗口白屏。
- 原子升级与回滚:升级采用“暂存改名 → 安装新版 → 自检 → 提交删除”机制,任一步失败自动回滚;若检测到 PXView 正在运行则默认拒绝升级以保护采集数据。
- 环境控制变量:
环境变量 默认行为 设置为 yes时的行为PXVIEW_KILL_RUNNING=yes发现运行中进程则终止升级 自动结束运行中的进程并继续升级 PXVIEW_FORCE=yes目标目录非 PXView 时拒绝接管 强制接管目标目录 PXVIEW_OVERWRITE=yes执行安全暂存切换 纯覆盖安装 PXVIEW_KEEP_OLD=yes升级成功后清理旧版 保留旧版本备份
一、新增能力与行为变更
1. 多标签页设备独立绑定与状态持久化
- 每标签独立设备:每个标签页绑定独立的设备句柄。切换标签时自动恢复该页对应的设备、通道数与专属配置,文件设备(如 VCD)不再随全局切换被提前释放。
- 状态随文档保存:标签页的设备及通道状态通过文档上下文独立持久化,重新加载工程时完整恢复。
- 加载规则变更:设备默认 Profile(如
demo0.pxc)仅在首次初始化或用户手动选择新设备时加载;切换标签页时跳过 Profile 重载,严格保留用户在当前页的自定义通道与 Header 设置。
2. 通道元数据统一以 SignalModel 为唯一可信源
- 设备选项面板展示与
.pxc配置序列化均改为统一读写SignalModel。 - 用户重命名后的通道名称、启用状态及信号类型,能在配置保存、重载以及设备设置界面中保持一致。
二、缺陷修复
2.1 业务逻辑与渲染
- 修复:多标签页设备与通道状态相互踩踏
- 根因:文件设备随全局切换被错误释放;标签页未隔离设备上下文。
- 修复:文件设备生命周期改由所属标签页管理,标签切换时按句柄恢复独立状态。
- 涉及文件:
deviceagent.cpp/.h、storesession.cpp、file_ops.cpp、tabcontext.cpp
- 修复:启动后 Demo 标签页绑定错误设备句柄
- 根因:首选设备初始化时序倒置,残留的 VCD 文件句柄被记入 Demo 标签,导致切回时通道数异常。
- 修复:调整
on_load_device_first()时序,先完成默认设备初始化再记录有效句柄。 - 涉及文件:
mainwindow.cpp
- 修复:采集结束后波形轨道整体清空消失
- 根因:信号重置逻辑误读取了空的快照源,在清空旧信号后未能生成新信号轨。
- 修复:
on_signals_changed()统一以SigSession常驻的SignalModel为唯一数据源。 - 涉及文件:
view_signal_sync.cpp
- 修复:毛刺滤波(Glitch Filter)通道映射错位
- 根因:滤波任务遍历通道时未按索引排序,导致通道索引与反相映射不匹配。
- 修复:
glitch_filter_task改为按通道 index 递增顺序有序遍历。 - 涉及文件:
filterprocessor.cpp
2.2 桌面集成与跨平台
- 修复:Linux 虚拟机及无 GPU 环境下 WebKit 启动白屏
- 修复:初始化前检测运行环境;在虚拟机或无独显环境下自动降级为软件合成模式,其余环境保持硬件加速。
- 涉及文件:
web/src-tauri/src/lib.rs
- 修复:Linux 桌面已装 WebKit 仍误报未检测到
- 修复:修正检测逻辑中的库路径探测与环境判定规则。
- 修复:普通用户权限下桌面图标不显示、菜单异常
- 根因:严格 umask(如 077)环境下安装产物权限被设为 600。
- 修复:安装器固定
umask 022并归一化系统集成文件权限;GNOME 下补充用户会话总线地址。
- 修复:卸载脚本提权失败静默退出
- 修复:
pkexec执行失败时自动降级回退至sudo;卸载桌面项图标由通用的edit-delete改为 PXView 原生图标。
- 修复:
- 修复:Windows(NSIS)误选系统盘根目录风险
- 修复:禁止将
C:\、Windows、Program Files等系统目录设为安装目标,防止卸载时级联误删。
- 修复:禁止将
三、内部架构与工程改进
3.1 设备意图协议重构(Phase 1–5)
- 事件语义显式化:
- 新增
DeviceChangeReason枚举(FirstInit/UserSelection/TabSwitch)。 CurrentDeviceChanged携带{reason, handle},DeviceModeChanged携带{mode, reason}。SigSession::set_device增加reason参数(默认UserSelection,既有调用点零改动兼容)。- 移除
has_signal_config()启发式判断,状态调度统一由显式 Reason 裁决。
- 新增
- 时序确定性保障:
- 引入
loading_device_profile标志与排队清理,消除加载 Profile 期间级联触发CHANNEL_MODE导致的双重刷新。 DeviceOptionsUpdated事件新增skip_model_reload标志;在显式重建后跳过二次冗余 reload,收敛事件瀑布。
- 引入
- 涉及核心文件:
events.h、sigsession.cpp、event_dispatcher.cpp、mainwindow.h、tabcontext.cpp/.h
3.2 构建、打包与 CI
- 安装器体系构建:
- 基于
makeself构建单文件安装包,内嵌单遍 MD5 校验(--nocrc),支持--target、--check等标准参数。 - 引入
.pxview/manifest.txt与install.json进行文件登记与目录接管保护。 - CMake 增加 Linux
INSTALL_RPATH靠 RUNPATH 解析自带库。
- 基于
- CI 流水线稳定性:
- 更新 GitHub Actions 依赖(
checkout v4→v7,upload-artifact→v8,setup-node v4→v6);配置HOMEBREW_NO_REQUIRE_TAP_TRUST。 - 放宽 ASan/TSan 超时看门狗(ASan 看门狗放宽至 600s / 任务 60min;TSan 放宽至 900s / 任务 90min),确保端到端测试不被误杀。
macos-debugpush 时默认不跑自动构建,保留手动workflow_dispatch触发。- 修正 X11 依赖名称(
xwd归属x11-apps),新增像素级窗口渲染比对测试check_window_render.py。 - 新增
SignalModel与libsigrok结构体双向同步的单元测试。
- 更新 GitHub Actions 依赖(
- 版本标识:全局版本号升级至 1.6.0,更新应用 Logo。