Skip to content

PXView_v1.6.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 15:43
· 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-debug push 时默认不跑自动构建,保留手动 workflow_dispatch 触发。
    • 修正 X11 依赖名称(xwd 归属 x11-apps),新增像素级窗口渲染比对测试 check_window_render.py。
    • 新增 SignalModel 与 libsigrok 结构体双向同步的单元测试。
  • 版本标识:全局版本号升级至 1.6.0,更新应用 Logo。