标签: code-analysis

嵌入式C++项目的代码覆盖率分析

我最近开始研究一个非常大的C++项目,在完成90%的实现后,确定他们需要在测试期间展示100%的分支覆盖率.该项目托管在一个嵌入式平台(Green Hills Integrity)上.我正在寻找StackOverflow上其他人在类似环境中使用代码覆盖产品的建议和经验.我对这些类型的工具的正面和负面评论感兴趣.

testing embedded code-analysis

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

是否有Delphi库返回项目的所有有效源路径?

对于静态代码分析工具,有必要了解给定Delphi项目的所有有效源路径,这些路径在项目级别和全局IDE配置中定义.

是否有可以收集此类项目信息的Delphi库?

据我所知,Delphi IDE的注册表设置可以在不同的地方,以支持多种配置.但是对于IDE注册表位置和项目文件的给定组合,应该可以收集源路径.

编辑:另一种解决方案是使用--depends开关.这将导致dcc32.exe写入一个".d"文件,其中包含项目的所有dcu文件名(以及所有依赖项),包括路径名.但是,文件列表包含已编译的单元,因此它不是原始问题的正确解决方案.

delphi code-analysis path delphi-2009

7
推荐指数
2
解决办法
3174
查看次数

7
推荐指数
3
解决办法
1万
查看次数

扩展作业测试平台,包括代码分析(C/C++)

我正在维护/开发一个家庭作业测试平台.它主要是自动的.我现在需要添加的是代码分析.我需要检查特定结构的代码.

例如:

该文件是否main.cpp包含user使用const方法 命名的类get_name()?

是否有一些工具可以让我做这些东西(理想的是可以编写脚本的东西).仅限Linux.

c++ linux code-analysis static-code-analysis

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

使用没有Format和IFormatProvider的Int32.ToString().为什么我会收到CA1305警告?

很长一段时间以来,我一直在想这个问题,但我似乎无法找到明确的答案.每当我使用该ToString()方法将整数转换为字符串,并运行代码分析时,我会收到以下警告:

CA1305:Microsoft.Globalization:因为'int.ToString()'的行为可能会根据当前用户的语言环境设置而有所不同,所以在'Class.Method()'中调用此调用,调用'int.ToString(IFormatProvider)' .如果'int.ToString(IFormatProvider)'的结果将显示给用户,请将'CultureInfo.CurrentCulture'指定为'IFormatProvider'参数.否则,如果结果将由软件存储和访问,例如将其保存到磁盘或数据库,请指定"CultureInfo.InvariantCulture".

这是众所周知的通用CA1305警告,只要您调用具有接受IFormatProvider参数的重载的方法,就会显示该警告.虽然在几乎所有情况下这都是一个非常正确的警告,但是在调用默认值ToString() 而没有任何格式或formatprovider的整数时,我想不出任何可能出错的地方.所以,如果有人知道任何可能出错的事情,请启发我.我猜测必须有一个很好的理由来IFormatProvider超载.

顺便说一句,我也总是用电话IFormatProvider超载,因为它似乎也有性能优势.如果有人对此有任何见解,请随时分享.

.net c# globalization code-analysis

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

处理对象的代码分析友好方式

作为Visual Studio 2010(主要是C#4.0)开发标准的一部分,我们启用了代码分析.当我正在审查最近为新项目提交的代码时,我看到了很多

CA2000:Microsoft.Reliability:在方法'XYZ'中,对象'ABC'不沿所有异常路径放置.在对所有引用超出范围之前,调用System.IDisposable.Dispose对象'ABC'.

警告.问题是,我所做的一切似乎都没有消除警告 - 我花了几个小时搜索网络并尽我所能.

首先,让我明确一点,我不是在谈论将一个简单的使用块放入正确处理局部变量 - 这不是问题.在我的情况下,当对象由方法返回或分配给方法中的另一个对象时,会出现这些警告.

这是一个代码示例,其中包含四个此类警告:

public void MainMethod()
{
    var object1 = CreateFirstObject();    // Warning here
    var object2 = CreateSecondObject();   // Warning here

    SomeCollectionProperty.Add(object1);
    SomeCollectionProperty.Add(object2);
}

private SomeObject CreateFirstObject()
{
    var theObject = new SomeObject()      // Warning here
    {
        FirstProperty = "some value",
        // ...
    };

    return theObject;
}

private SomeOtherObject CreateSecondObject()
{
    var theObject = new SomeOtherObject() // Warning here
    {
        FirstProperty = "a different value",
        // ...
    };

    return theObject;
}
Run Code Online (Sandbox Code Playgroud)

我已经评论了警告发生的地方. …

.net c# code-analysis idisposable static-code-analysis

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

使用ANTLR分析和修改源代码; 我做错了吗?

我正在编写一个程序,我需要解析一个JavaScript源文件,提取一些事实,并插入/替换部分代码.根据以下代码,我需要做的事情的简化描述:

foo(['a', 'b', 'c']);
Run Code Online (Sandbox Code Playgroud)

提取'a','b'和'c',并将代码重写为:

foo('bar', [0, 1, 2]);
Run Code Online (Sandbox Code Playgroud)

我正在使用ANTLR来解析我的需求,生成C#3代码.其他人已经提供了JavaScript语法.解析源代码是有效的.

我遇到的问题是弄清楚如何实际正确分析和修改源文件.我尝试实际解决问题的每种方法都让我陷入了死胡同.我不禁想到我没有按照预期使用该工具,或者在处理AST时只是太过新手.

我的第一种方法是使用a解析TokenRewriteStream并实现EnterRule_*我感兴趣的规则的部分方法.虽然这似乎使得令牌流的修改变得非常简单,但是我的分析没有足够的上下文信息.似乎所有我可以访问的是一个平坦的令牌流,这并没有告诉我足够的整个代码结构.例如,要检测是否foo正在调用该函数,只需查看第一个令牌就行不通,因为它也会错误地匹配:

a.b.foo();
Run Code Online (Sandbox Code Playgroud)

为了让我能够进行更复杂的代码分析,我的第二种方法是使用重写规则修改语法以生成更多的树.现在,第一个示例代码块产生:

Program
    CallExpression
        Identifier('foo')
        ArgumentList
            ArrayLiteral
                StringLiteral('a')
                StringLiteral('b')
                StringLiteral('c')

这对于分析代码非常有用.但是,现在我无法轻易地重写代码.当然,我可以修改树结构来表示我想要的代码,但我不能用它来输出源代码.我曾希望与每个节点相关联的令牌至少能给我足够的信息来知道我需要在原始文本中进行修改的位置,但我得到的只是令牌索引或行/列号.要使用行号和列号,我必须在源代码中进行尴尬的第二次传递.

我怀疑我在理解如何正确使用ANTLR做我需要的东西时遗漏了一些东西.有没有更合适的方法来解决这个问题?

parsing code-analysis antlr antlr3

7
推荐指数
2
解决办法
2369
查看次数

使代码分析停止关于某个变量名称的警告

我有一个名为的变量allowedZHs.ZH是域特定的缩写.ZHs是它的复数形式.我想继续使用复数形式.我发现它比"正确"形式更具表现力" Zhs".
我试图通过添加代码分析字典来告诉代码分析.这适用于单数形式" ZH",但它不适用于复数形式.
我仍然收到警告CA1704.

我尝试将其添加为一个公认的单词并将其添加为首字母缩略词:

<Dictionary>
  <Words>
    <Recognized>
      <Word>ZHs</Word>
    </Recognized>
  </Words>
  <Acronyms>
    <CasingExceptions>
      <Acronym>ZHs</Acronym>
    </CasingExceptions>
  </Acronyms>
</Dictionary>
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?

.net c# code-analysis

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

C#可变性 - VS代码分析给我CA2104?似乎......很穷.我误会了吗?

在C#中,我想制作"智能"枚举,有点像Java中那样,其中有更多信息附加到枚举值而不仅仅是底层int.我发生了一个创建类(而不是枚举)的方案,如下面的简单示例所示:

public sealed class C
{
    public static readonly C C1 = new C(0, 1);
    public static readonly C C2 = new C(2, 3);

    private readonly int x;
    private readonly int y;

    private C(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public int X
    {
        get
        {
            return this.x;
        }
    }

    public int Y
    {
        get
        {
            return this.y;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行Visual Studio的"代码分析器"时,它会向我发出警告C2104,"不要声明只读可变引用类型".

我明白为什么你一般不想声明只读可变引用类型,但是...我的类不可变,是吗?

阅读警告的文档,似乎他们只是假设任何只读引用类型是可变的.例如,它表示如果类型确实是不可变的,那么请随意抑制此警告.事实上它给了我同样的警告,以下更简单的类:

public sealed class C
{
    public static readonly C C1 …
Run Code Online (Sandbox Code Playgroud)

c# code-analysis immutability mutability visual-studio

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

Python - 副作用/纯度分析工具?

在Python中是否存在用于副作用/纯度分析的现有工具,类似于Java中的http://jppa.sourceforge.net?

python code-analysis side-effects

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