如何调试GitHub Action中Qt6迁移后的Windows测试退出码127错误?
调试Windows平台GitHub Actions中Qt6测试的exit code 127错误
针对Qt5到Qt6迁移后Windows测试报exit code 127的问题,以下是无需登录构建服务器的调试方法:
1. 修复bash环境下的路径转义问题
在bash shell中,反斜杠\是转义字符,直接使用Windows路径会导致解析错误。修改测试执行命令中的路径为正斜杠或双反斜杠:
# 用正斜杠 cd build && "/c/a/projectName/build/Bin/MyTest.exe" # 或双反斜杠 cd build && "C:\\a\\projectName\\build\\Bin\\MyTest.exe"
同时在运行测试前,先验证文件存在性:
test -f "/c/a/projectName/build/Bin/MyTest.exe" && echo "测试程序存在" || echo "测试程序缺失"
2. 检查环境变量与依赖查找路径
添加步骤打印PATH和Qt相关环境变量,确认Qt6的bin目录是否被正确加入:
echo "当前PATH:" echo $PATH echo "Qt安装路径:" echo $QTDIR
如果Qt6的bin目录不在PATH中,手动添加:
export PATH="$QTDIR/bin:$PATH"
3. 分析测试程序的依赖项
使用dumpbin工具检查测试程序的依赖库,确认是否有缺失的DLL(包括自定义自研库和Qt6模块):
cd /c/a/projectName/build/Bin dumpbin /dependents MyTest.exe
输出会列出所有依赖的DLL,对比Bin目录下的文件,找出缺失项。
4. 切换到PowerShell执行测试
避免bash shell的路径解析问题,改用PowerShell运行测试,能获得更原生的Windows错误提示:
- name: Run test with PowerShell if: matrix.os == 'windows' && steps.prepare-env.outputs.shouldbuild == 1 shell: pwsh run: | & "C:\a\projectName\build\Bin\MyTest.exe"
5. 捕获完整的错误输出
将测试程序的标准输出和错误输出重定向到日志文件,查看更详细的错误信息:
cd build && "/c/a/projectName/build/Bin/MyTest.exe" > test_log.txt 2>&1 cat test_log.txt
日志中可能会明确提示哪个DLL加载失败。
6. 验证自定义自研库的部署
确认自定义库是否被正确复制到测试程序的Bin目录,或是否在PATH中。添加步骤列出Bin目录的所有文件:
ls -la /c/a/projectName/build/Bin
检查自定义库的文件名、版本是否与测试程序依赖的一致。
内容的提问来源于stack exchange,提问作者Thestrup
相关产品推荐
相关产品推荐

