标签: code-analysis

Vb.Net CA1822

我运行了一个代码分析并收到了这条消息:

警告5 CA1822:Microsoft.Performance:从不使用'MainForm.CheckFileIfFileIsInUse(String)'中的'this'参数(或Visual Basic中的'Me').将成员标记为静态(或在Visual Basic中为Shared)或在方法体中使用"this"/"Me"或至少使用一个属性访问器(如果适用).d:\工作\更新\更新\ MainForm.vb

我不确定我理解它.这是它所指的行:

Dim testfile As String = thefilename & ".tst"
Run Code Online (Sandbox Code Playgroud)

它说从未使用它,但在下一行我有这个:

If IO.File.Exists(testfile) Then
    IO.File.Delete(testfile)
End If
Run Code Online (Sandbox Code Playgroud)

所以我知道它正在被使用.我在两个地方都有同样的信息我不明白为什么它说它从未使用过.

帮助一个困惑的新手找到他的方式:P

谢谢你,像往常一样

vb.net code-analysis

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

SVN归因插件?

我正在将SVN与Google Code Project Hosting一起用于学校项目.随着代码库大小的增加,我经常发现自己想知道如下问题:

  • "谁最初检查过这行代码?"
  • "谁最近一直在检查最多的代码?"
  • "在最终产品中,有多少是由人X编写的?"
  • "哪个编码器最擅长遵守编码惯例?"

有没有可用的插件?(如果没有,我会有兴趣自己开发一个.关于从哪里开始的任何想法?)

我们将Visual Studio 2008与AnkhSVN插件一起使用.

svn code-analysis

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

代码分析c#.NET CA1822

我运行代码分析并收到此消息:

CA1822:Microsoft.Performance:从不使用'CreateIntervalString(TimeSpan)'中的'this'参数(或Visual Basic中的'Me').将成员标记为静态(或在Visual Basic中为Shared)或在方法体中使用"this"/"Me"或至少使用一个属性访问器(如果适用).

我的代码是:

private string CreateIntervalString(TimeSpan timeSpan)
{
    return timeSpan.ToString();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,因为CreateIntervalString函数不使用类的任何成员,并且只使用timeSpan输入,VisualStudio建议我将其标记为静态.

我的问题:

  1. 为什么当我将其标记为静态时,性能会得到改善?
  2. 我的函数是库的一部分应该是线程安全的,标记方法是否为静态阻止这个?
  3. 我有额外的私有函数只使用它的输入,并没有在类的任何其他成员使用,但我没有得到相同的错误.

非常感谢!

例子:

以下方法提供错误:

    private string CreateIntervalString(TimeSpan timeSpan)
    { 
          return timeSpan.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

以下不是:

    private DateTime ParseDateString(string dateTimeString)
    {
     // the years,monthe,days,hours,minutes and secondes found by the dateTimeString input        
      return new DateTime(years, months, days, hours, minutes, secondes);
    }
Run Code Online (Sandbox Code Playgroud)

c# static code-analysis

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

如何在Ruby源代码文件中获取所有字符串文字?

我正在分析一些代码,我正在寻找字符串文字,以检查我是否有任何重复.例如,如果我有

def test_foo
  input_filename = "foo.txt"
  # ...
end

def test_bar
  input_filename = "bar.txt" # Fine
  # ...
end

def test_baz
  # Bad! Refactor it to a constant that's shared by test_foo and test_baz
  input_filename = "foo.txt" 
  # ...
end
Run Code Online (Sandbox Code Playgroud)

我希望分析程序告诉["foo.txt", "bar.txt", "foo.txt"]我源代码中存在的内容.

我怎样才能做到这一点?

ruby code-analysis

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

有关处理表单的代码分析警告

我有几个静态方法将Form转换为Control(如下所示).分析器标记两者,说明"CA2000:Microsoft.Reliability:In method'...',object'form'不是沿着所有异常路径放置的.在所有对它的引用之前调用System.IDisposable.Dispose on object'form'超出了范围." 类似的标记为tabPage.

注意:对于那些没有Enterprise Edition和Analyzer菜单的用户,这看起来很像FxCop输出.

我不清楚我应该做什么.如果new失败,将抛出异常.我有机会打电话到哪里Dispose

class Foo
{
  static public Form FormAsControl()
  {
    Form form = new Foo();

    form.TopLevel = false;
    form.FormBorderStyle = FormBorderStyle.None;
    form.Dock = DockStyle.Fill;
    form.Visible = true;

    return form;
  }

  static public TabPage FormAsTabPage()
  {
    Form form = Foo.FormAsControl();
    TabPage tabPage = new TabPage();

    tabPage.Text = form.Text;
    tabPage.Controls.Add(form);

    return tabPage;
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

.net c# code-analysis visual-studio-2010

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

假设运行时分析简单,需要解释

根据今天的讲座,第一个循环具有顺序的运行时O(n),而第二个循环具有顺序的运行时O(log(n)).

for (int i = 0; i < n; i++) { // O(n)
    stuff(); // O(1)
}

for (int i = 1; i < n; i*=4) { // O(log(n))
    stuff(); // O(1)
} 
Run Code Online (Sandbox Code Playgroud)

有人可以详细说明原因吗?

algorithm code-analysis

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

检测C中的结构字段访问

我想强制某个结构永远不会直接访问它的字段,总是使用结构函数.

例:

struct NoOutsideAccess { int field1;}
struct example {NoOutsideAccess f1;}

NoOutsideAccess noa;
example * ex;

&noa          // OK
&ex->noa      // OK
noa.field1;   // ERROR
ex->f1.field1 // ERROR
Run Code Online (Sandbox Code Playgroud)

我看过C解析器和分析工具,但我不确定我能用它们做到这一点.

我不想更改结构,因为它的字段将直接在其他模块中使用.在这种情况下,我想要一些脚本来指出它的使用位置,以便不应该改变它的模块.

但我确实发现了一个副本,不确定是否会匹配每个用法,但会给它一个镜头.

c parsing code-analysis c99 static-code-analysis

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

无法删除代码分析警告 C26462

示例代码:

void COptionsDlg::OnBnClickedButtonMoreSettings()
{
    CString strCaption = _T("");
    const auto pMoreSettingsButton = GetDlgItem(IDC_BUTTON_MORE_SETTINGS);

    if (pMoreSettingsButton == nullptr)
        return;

    pMoreSettingsButton->GetWindowText(strCaption);

    __pragma(warning(suppress:26414))
        auto pDlgOther = std::make_unique<COtherSettingsSheet>(strCaption);
    if (pDlgOther != nullptr)
    {
        pDlgOther->DoModal();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器仍然抱怨这一行:

在此输入图像描述

它仍然说:

C26462: by 指向的值pMoreSettingsButton仅分配一次,将其标记为指向const(con.4)的指针。

我正在使用 Visual Studio 2022 Preview 6,并且我在其他类文件中注意到了这一点。这是我做错了什么还是我应该向 Microsoft 解决的错误?

mfc code-analysis visual-c++ visual-studio-2022

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

C++ 编译器警告 C26409 - 避免调用 new 和 delete

这是我在进行 Visual Studio 2019 代码分析后得到的代码(警告 C26409 避免显式调用 new 和 delete,请使用 std::make_unique (r.11)。):

#include <windows.h>
#include <strsafe.h>
int main()
{
    auto *sResult = new WCHAR[256];
    StringCchPrintfW(sResult, 256, L"this is a %s", L"test");
    delete[] sResult;
}
Run Code Online (Sandbox Code Playgroud)

我原本假设使用 new/delete 而不是 calloc/free,但现在编译器告诉我使用 std::make_unique。我找不到任何有关如何更改代码以使其兼容的示例。

所以我的问题是:

  1. 如何更改我的代码,使其不使用 new/delete

  2. 为什么我不应该使用 new/delte 与 std::make_unique ?

c++ code-analysis new-operator microsoft-code-analysis

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

为什么VS2013 RC中的代码分析会将我带入箱形峡谷?

我在我正在维护的实用程序上运行代码分析,它建议我更改它:

private static extern int ReadMenu1File(string Menu1Path);
Run Code Online (Sandbox Code Playgroud)

......对此:

private static extern int ReadMenu1File(UnmanagedType.LPWStr Menu1Path);
Run Code Online (Sandbox Code Playgroud)

...使用此措辞:"为P/Invoke字符串参数指定封送处理为了降低安全风险,将参数'Menu1Path'编组为Unicode,将DllImport.CharSet设置为CharSet.Unicode,或者将参数显式封送为UnmanagedType.LPWStr.如果需要将此字符串封装为ANSI或依赖于系统,请明确指定MarshalAs,并设置BestFitMapping = false;为了增加安全性,还要设置ThrowOnUnmappableChar = true."

...但是当我这样做时,它说:" 类型名称'LPWStr'在类型'System.Runtime.InteropServices.UnmanagedType'中不存在 "和''System.Runtime.InteropServices.UnmanagedType.LPWStr'是'字段'但用作'类型' "

代码完成没有帮助(键入"UnmanagedType."后没有建议.)也没有上下文菜单选项来添加缺失使用.

c# code-analysis unmanaged visual-studio-2013

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