shellcat合并文件出现错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shellcat合并文件出现错误相关的知识,希望对你有一定的参考价值。

参考技术A 我正在尝试在我为类 Unix 操作系统 (xV6) 编写的 shell 中实现 I/O 重定向。在我为操作系统阅读的手册中,我发现以下代码将在 shell 中运行以执行 cat 命令:

char *argv[2];
argv[0] = "cat";
argv[1] = 0;
if(fork() == 0)
close(0);
open("input.txt", O_RDONLY);
exec("cat", argv);

我修改了代码以在我的 shell 中运行,它的 argv 数组位于另一个函数中,但它保持了功能。出于某种原因,当我运行cat < input.txtshell 输出时:

cat: -: Bad file descriptor
cat: closing standard input: Bad file descriptor
我还是 OS 编程的新手,所以我对 I/O 重定向的所有功能不是很清楚,但我认为我拥有的代码应该可以工作。什么可能导致问题。我有下面的 I/O 重定向代码:

case '<':
ecmd = (struct execcmd*)cmd;
rcmd = (struct redircmd*)cmd;

if(fork() == 0)
close(0);
open("input", O_RDONLY);
execvp(ecmd->argv[0], ecmd->argv );

runcmd(rcmd->cmd);
break;
编辑
我做了strace -e open ls并得到:

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-l

Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并出现错误“错误:无法合并配置文件。”

【中文标题】Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并出现错误“错误:无法合并配置文件。”【英文标题】:Xcode UI Tests : xcodebuild fails to generate Coverage.profdata on xcode12, fails with error 'error: No profiles could be merged.' 【发布时间】:2021-03-16 10:42:25 【问题描述】:

这是我们在遇到问题时的设置方式。

我们有一个同时包含 UI 和单元测试的项目。 使用快车道。 使用在 aws ec2 实例上运行的 Jenkins 实施 CI/CD。 最近我们迁移到 Xcode12(我知道!!!不过,迟到总比没有好)

问题陈述:

迁移到 xcode12 后,jenkins 管道无法生成 Coverage.profdata 文件,而 Slather 将使用该文件来导出代码覆盖率指标。是的,运行xcode11时没有发生。

在将xcodebuild 命令指向适当的命令行工具版本(在本例中为 12.4)后,我们正在使用它。

首先我们使用(在获得模拟器 ID 后)构建应用

xcodebuild build-for-testing -workspace Example.xcworkspace -scheme ExampleUITests -derivedDataPath ./derivedData -destination 'platform=iOS Simulator,id=<simulator_id>'

然后我们使用

运行测试
xcodebuild test-without-building -workspace Example.xcworkspace -scheme ExampleUITests -enableCodeCoverage YES -destination 'platform=iOS Simulator,id=<simulator_id>' -derivedDataPath ./derivedData

所有 UI 测试都成功运行,但在测试套件完成时会出现以下语句。

warning: <Path_to_derived_data>/Build/ProfileData/<Some_UUID>/<Filename>.profraw: Invalid instrumentation profile data (file header is corrupt)
error: No profiles could be merged.

P.S:这不会发生在我的本地机器上。仅在 Jenkins ec2 实例的 mac 上。

【问题讨论】:

你用fastlane的xcov插件试过了吗? 所以在这个例子中我们没有使用 fastlane,你可以看到它是 xcodebuild 命令。并不是我不能使用它,而是我们将它作为模板化基础设施的一部分运行,这是在运行测试时执行的。 好吧,其实xcodebuild会在/Build/ProfileData//Coverage.profdata下自行生成Coverage.profdata。我可以向您保证,因为我们在自定义脚本中使用它来生成报告。 @SachinVas... 是的,这是预期的情况,但正如我上面提到的,我面临的错误是 Coverage.profdata 没有生成,因为 xcodebuild 命令面临问题的 merging/generating 。 proraw 文件。顺便说一句,这只发生在 Xcode 12 和 Jenkins 环境中。从 Xcode 11 在相同的环境中运行相同的设置工作正常。 我只是古玩,谁在运行merge命令生成Coverage.profdata? 【参考方案1】:

我们遇到了类似的问题。我们也在使用 fastlane。

对我们有用的修复是确保我们从之前的构建中删除任何工件。您描述的情况与我们面临的情况非常相似。单元测试的第一次运行会生成一些覆盖工件,之后执行 UI 测试也会生成覆盖工件,然后 xcov/slather 无法解析这些工件。

因此,您能否检查一下删除派生数据中的Logs/Test 文件夹是否有帮助?如果它没有尝试完全清除派生数据,然后检查这是否有助于解决 CI 问题。

见related threadson xcov

【讨论】:

以上是关于shellcat合并文件出现错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:清单合并失败并出现多个错误,请参阅日志

清单合并失败并出现多个错误:Android Studio Java

多个EXCEL的CSV文件合并时会把每个文件的表头重复合并到结果文件里,能否让合并结果只有一个表头呢?

在python中合并多个zip文件

FPDI合并PDF文件,出现奇怪的线条

用命令行合并ts文件出现顺序混乱的现象,求一份新的代码