小编gha*_*ndi的帖子

LCOV/GCOV分支覆盖范围,C++生成分支机构

我们正在使用LCOV/GCOV来为我们的项目提供测试覆盖率.最近我们尝试另外启用分支覆盖.但看起来,这只是不会产生我们从高级开发人员视图中预期的结果.

在C++中使用branch-coverage可以在整个地方分支报表.我们怀疑(正如搜索问题所示)主要是异常处理代码创建这些"隐藏分支".GCOV/LCOV似乎没有跳过这些.

我创建了一个小测试项目来显示问题:https://github.com/ghandmann/lcov-branch-coverage-weirdness

目前我们使用的是Ubuntu 16.04.有:

  • gcc v5.4
  • lcov&genhtml v1.12

我们的生产代码是在启用c ++ 11的情况下构建的.最小的例子不是在启用c ++ 11的情况下构建的,但是当我们尝试使用所有不同的选项(c ++标准,优化-fno-exceptions)时,我们没有得到可通过的结果.

有人有想法吗?的窍门?我们使用的是错误的方式吗?这是否 - 如其他地方所述 - 真正预期的行为?

更新:

正如gcc-help邮件列表中指出的那样,这些"隐藏分支"由于异常处理而发生.因此,将-fno-exceptions开关添加到gcc会为"简单"程序产生100%的分支覆盖率.但是当禁用异常时,gcc拒绝编译实际使用异常的代码(例如try-catch,throw).因此,对于实际生产代码,这不是一种选择.看起来,在这种情况下,你必须简单地宣布约50%的覆盖率为新的100%.;)

c++ code-coverage gcov lcov

19
推荐指数
3
解决办法
9920
查看次数

使用 C# .NET 4.0 验证可执行文件的 Authenticode

我们将可执行文件交付给客户端服务,该服务在从我们的服务器下载该可执行文件后在新进程中启动该可执行文件。

可执行文件已使用我们公司的 CodeSigning-Certificate 进行签名(验证码),现在我想验证下载的可执行文件是否使用此 CodeSigning-Certificate 进行了有效签名,以防止恶意的中间人攻击。

但目前我找不到任何关于如何在不使用“signtool.exe”(客户端不可用)的情况下验证这一点的提示。

客户端上的下载服务是一个用 C# 编写的 .NET 4.0 应用程序。所以我正在寻找一种方法来验证下载文件的验证码,并且只有在验证成功时才继续。

.net c# authenticode signtool

5
推荐指数
1
解决办法
1817
查看次数

检索运行时赋予 HasMaxValue 的值

我有一个代码优先 EF Core 模型。某些列使用HasMaxLength(X)流畅语法来限制这些列的长度。目前这些限制仅由数据库强制执行,我想在访问数据库之前找出字符串何时变得太长。

流畅的配置示例:

modelBuilder.Entity<SomeEntity>(entity =>
            {
                entity.Property(p => p.SomeStringProperty)
                    .HasMaxLength(200);
            });
Run Code Online (Sandbox Code Playgroud)

HasMaxLength现在,当我手头只有一个 DBContext 时,我想在运行时获取该值。有可能吗?

正在思考类似的事情:ctx.Set<SomeEntity>.SomeStringProperty.MaxLength()

c# validation entity-framework-core

5
推荐指数
1
解决办法
851
查看次数

在文件中以块为单位更改文件类型(或其他Vim设置)?

我在Vim编写了很多Perl.通常我只是将一些CGI脚本放在一起并将CSS放入程序代码中.最近我问自己是否可能,在我的代码中对这些块添加一些特定于Vim的注释,以便vim突出显示特定区域而不是Perl脚本,而是作为级联样式表.

在使用Mojolicious时,这也很简洁,您可以将整个模板嵌入到DATA区域,但会丢失HTML的所有突出显示.

当然,我可以在文件类型/突出显示之间手动切换.但我想知道是否有更好的方法.

谢谢,斯文

vim file-type syntax-highlighting block

4
推荐指数
2
解决办法
4649
查看次数

DBIx::Class / SQL::Abstract 将 SQL 函数应用于 WHERE 子句中的列

我只是摆弄了一个复杂的 SQL 查询DBIx::Class(它在幕后用于SQL::AbstractWHERE 子句)。

我使用 BETWEEN 运算符来过滤条目:

# SELECT title FROM tracks WHERE begin BETWEEN '2016-07-01' AND '2016-07-02'
$searchArgs->{'begin'} = { BETWEEN => ['2016-07-01', '2016-07-02' ] };
Run Code Online (Sandbox Code Playgroud)

这将跳过实际的开始日期 2016-07-02。可能是因为这些开始值已超过 2016 年 7 月 2 日午夜 (00:00),因此不在 BETWEEN 范围内(请参阅末尾的示例数据)。

在 SQL 端,这个问题很容易修复:

SELECT title FROM tracks WHERE DATE(begin) BETWEEN '2016-07-01' AND '2016-07-02'
# Note the DATE()-cast of begin
Run Code Online (Sandbox Code Playgroud)

有没有办法通过SQL::Abstract语法来实现这一点?我尝试将列名称作为标量引用($searchArgs->{\"DATE(begin)"})以使其不受影响地通过,但没有成功。

$searchArgs->{'DATE(begin)'}由于没有这样的列“DATE(begin)”,因此仅使用就会触发 SQL 错误。

# Minimal example data
CREATE TABLE test ( title VARCHAR(255), …
Run Code Online (Sandbox Code Playgroud)

postgresql perl dbix-class

4
推荐指数
1
解决办法
443
查看次数

WebRTC 单向视频通话

我们正在公司里摆弄WebRTC。我偶然发现了一件奇怪的事情,我不确定是 WebRTC 中的设计还是我们这边的实现错误。

我们目前有一个简单的 WebApp,它显示在线联系人的联系人列表。现在可以简单地呼叫联系人列表中的任何用户。

呼叫者和被呼叫者可以自由选择共享网络摄像头和/或音频。然后由 GetUserMedia() (MediaConstraints) 尊重。

现在奇怪的事情:客户端(Chrome 65)只有在呼叫者以启用视频开始时才协商视频通话。如果来电者没有提供他的网络摄像头,我们不会让被叫方网络摄像头流回(如果他允许的话)。

但是,当呼叫者在启用他的网络摄像头的情况下发起呼叫并且被呼叫者决定不显示他的时,一切都按预期进行。(只有来电者有直播)。

如果双方同意播放视频,我们将获得双向视频流。

如果这是这样的话,有人有一些内部知识吗?是否可以在不显示您自己的网络摄像头的情况下给某人打电话,但稍后会看到被叫方的网络摄像头?

提前致谢,斯文

video-streaming sdp webrtc oneway

4
推荐指数
2
解决办法
4286
查看次数

在一个查询中从DBIx :: Class :: ResultSetColumn获取SQL MIN()和MAX()

我想从表中选择MIN()MAX()列.但是,我只想在一次查询中解决这个问题,而不是两次查询数据库.

我知道我能做到这一点

my $col = $schema->result_source("Birthday")->get_column("birthdate");
my $min = $col->min();
my $max = $col->max();
Run Code Online (Sandbox Code Playgroud)

但它会查询数据库两次.

我发现的唯一其他解决方案是非常丑陋,通过搞乱selectas属性search().例如

my $res = $rs->search({}, {
   select => [ {min => "birthdate"}, {max => "birthdate"},
   as     => [qw/minBirthdate maxBirthdate/]
});
say $res->get_column("minBirthdate")->first() . " - " . $res->get_column("maxBirthdate")->first();
Run Code Online (Sandbox Code Playgroud)

产生这个 - 我想要的SQL

SELECT MIN(birthdate), MAX(birthdate) FROM birthdays;
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来完成这项工作DBIx::Class

为了使其更冷,有没有办法尊重色谱柱的膨胀/放气?

sql perl orm dbix-class

2
推荐指数
1
解决办法
1341
查看次数

git 标签不再被识别

我的 git 存储库遇到了一个奇怪的问题。它突然“停止”使用标签。我可以创建标签,我可以列出标签。我什至可以使用git checkout $taggit logs $tag。但是当使用git describe --exact-match标签时就不再检测到了?这目前破坏了我的管道,因为 master 上的标记提交似乎没有标记到 git 本身?一周前,它运行得非常完美。

$ git checkout master
$ git tag my-test-tag
$ git describe --exact-match
fatal: no tag exactly matches '4b2aa1dcf70eaf61640e6a983df82e1ffe3a5812'
Run Code Online (Sandbox Code Playgroud)

我已经尝试过运行git fsck --full,它只修复了一些悬空的提交,这对我来说看起来很好(因为我进行了很多变基)。

另一个有趣的事情是:该工具gitg没有显示这些“新”提交的任何历史记录。而对于“旧”承诺,一切都按预期进行。

有人知道这里发生了什么事吗?

在 3 台机器上测试,全部运行 git 版本 2.17.1。

git git-tag git-describe

1
推荐指数
1
解决办法
2874
查看次数