./build/bin/dlt-viewer 在使用tcp连接时出现dltviewer闪退

发布于:2025-04-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

在使用 dlt-viewer 通过 TCP 连接时出现闪退,可能由以下原因导致。请按以下步骤排查和解决:

  1. 确认 dlt-daemon 的 TCP 服务正常运行
  • 检查进程状态:
    ps aux | grep dlt-daemon
    
    确保输出中包含 --tcp-port=29448(默认端口)和 --tcp-ip=0.0.0.0(允许远程连接)。
  • 验证端口监听:
    sudo ss -tuln | grep 29448
    
    若无输出,重启 dlt-daemon 并显式指定参数:
    dlt-daemon --tcp-port=29448 --tcp-ip=0.0.0.0
    

  1. 检查防火墙/网络策略
  • 临时关闭防火墙测试:
    sudo ufw disable  # Ubuntu/Debian
    sudo systemctl stop firewalld  # CentOS/RHEL
    
  • SELinux 策略(如启用):
    sudo setenforce 0  # 临时禁用 SELinux
    

  1. 依赖库完整性
  • 安装缺失的库(常见缺失项):
    sudo apt-get install libqt5core5a libqt5gui5 libqt5network5 libssl-dev libgbm-dev
    
  • 验证动态库链接:
    ldd ./build/bin/dlt-viewer | grep "not found"
    
    若有缺失库,通过 apt-cache search 库名 定位并安装。

  1. 捕获调试信息
  • 启用详细日志:
    ./build/bin/dlt-viewer --verbose --host=目标IP --port=29448
    
    观察输出中是否有连接错误或权限提示。
  • 使用 gdb 调试:
    gdb ./build/bin/dlt-viewer
    (gdb) run --host=目标IP --port=29448
    
    根据崩溃时的堆栈信息(如 段错误未定义符号)定位问题。

  1. 版本兼容性
  • 确保 dlt-viewerdlt-daemon 版本一致:
    • 从同一 GitHub Commit 或 Tag 编译两者。
    • 检查版本号:
      dlt-daemon --version
      ./build/bin/dlt-viewer --version
      

  1. 重新编译项目
    清理构建缓存并重新编译(Debug 模式):
cd dlt-viewer/build
make clean
cmake -DCMAKE_BUILD_TYPE=Debug ..  # 启用调试符号
make

  1. 禁用 GPU 加速(可选)
    若使用远程桌面或虚拟机,尝试禁用硬件加速:
./build/bin/dlt-viewer --no-gpu --host=目标IP --port=29448

  1. 权限问题
  • 以普通用户运行(避免 sudo):
    ./build/bin/dlt-viewer --host=目标IP --port=29448
    
  • 检查文件权限:
    确保 /tmp 目录可写(dlt-viewer 可能临时存储数据):
    sudo chmod 1777 /tmp
    

总结命令

# 1. 重启 dlt-daemon 并监听 TCP
killall dlt-daemon
dlt-daemon --tcp-port=29448 --tcp-ip=0.0.0.0 &
# 2. 安装依赖
sudo apt-get install libqt5core5a libqt5gui5 libssl-dev
# 3. 运行 dlt-viewer 并捕获日志
./build/bin/dlt-viewer --verbose --host=目标IP --port=29448

若问题仍存在
请提供以下信息以便进一步分析:

  1. gdb 输出的崩溃堆栈(如 Backtrace)。
  2. --verbose 模式下的完整日志。
  3. dlt-daemondlt-viewer 的版本号。
    可通过以下命令获取详细日志:
./build/bin/dlt-viewer --verbose --host=目标IP --port=29448 > viewer.log 2>&1