在使用 dlt-viewer
通过 TCP 连接时出现闪退,可能由以下原因导致。请按以下步骤排查和解决:
- 确认
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
- 检查防火墙/网络策略
- 临时关闭防火墙测试:
sudo ufw disable # Ubuntu/Debian sudo systemctl stop firewalld # CentOS/RHEL
- SELinux 策略(如启用):
sudo setenforce 0 # 临时禁用 SELinux
- 依赖库完整性
- 安装缺失的库(常见缺失项):
sudo apt-get install libqt5core5a libqt5gui5 libqt5network5 libssl-dev libgbm-dev
- 验证动态库链接:
若有缺失库,通过ldd ./build/bin/dlt-viewer | grep "not found"
apt-cache search 库名
定位并安装。
- 捕获调试信息
- 启用详细日志:
观察输出中是否有连接错误或权限提示。./build/bin/dlt-viewer --verbose --host=目标IP --port=29448
- 使用
gdb
调试:
根据崩溃时的堆栈信息(如gdb ./build/bin/dlt-viewer (gdb) run --host=目标IP --port=29448
段错误
或未定义符号
)定位问题。
- 版本兼容性
- 确保
dlt-viewer
和dlt-daemon
版本一致:- 从同一 GitHub Commit 或 Tag 编译两者。
- 检查版本号:
dlt-daemon --version ./build/bin/dlt-viewer --version
- 重新编译项目
清理构建缓存并重新编译(Debug 模式):
cd dlt-viewer/build
make clean
cmake -DCMAKE_BUILD_TYPE=Debug .. # 启用调试符号
make
- 禁用 GPU 加速(可选)
若使用远程桌面或虚拟机,尝试禁用硬件加速:
./build/bin/dlt-viewer --no-gpu --host=目标IP --port=29448
- 权限问题
- 以普通用户运行(避免
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
若问题仍存在
请提供以下信息以便进一步分析:
gdb
输出的崩溃堆栈(如Backtrace
)。--verbose
模式下的完整日志。dlt-daemon
和dlt-viewer
的版本号。
可通过以下命令获取详细日志:
./build/bin/dlt-viewer --verbose --host=目标IP --port=29448 > viewer.log 2>&1