您希望将哪些可定义的静态代码检查规则添加到FxCop和/或Gendarme中?
您为什么希望看到添加规则,例如有什么好处?
你的规则如何实施?
作为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)
我已经评论了警告发生的地方. …
我安装了Cppcheck工具,用于我的C++项目的静态代码分析,并感觉它表现不佳.例如,任何人都可以告诉我为什么 Cppcheck无法在以下代码中找到数组越界错误?
void f(int c) {
char *p = new char[10];
p[c] = 42;
}
void g() {
f(100);
}
Run Code Online (Sandbox Code Playgroud)
有一个在线演示,可以使用Cppcheck方便地检查此代码.所有它提到的是第4行的内存泄漏,没有潜在缓冲区溢出的迹象.
我有一个自定义代码分析规则集,我想将其应用于解决方案中多个项目的所有配置,但不知道如何实现。
明确地说,我正在寻找一种方法(如果有的话)在一个步骤中执行此操作,而不是从 IDE 编辑每个项目的属性。
到目前为止,我找到了这个指导:https : //docs.microsoft.com/en-us/visualstudio/code-quality/how-to-configure-code-analysis-for-a-managed-code-project?view=vs -2019#specify-rule-sets-for-multiple-projects-in-a-solution
但这似乎并不正确。在 Visual Studio 2019 中,如果我转到“分析”>“配置代码分析”>“解决方案”,我会看到一个带有消息的空白属性页:
注意:此属性页已被弃用,将在未来的产品版本中删除。
还有另一种方法可以做到这一点吗?我有很多项目:(
谢谢。
solution visual-studio static-code-analysis roslyn roslyn-code-analysis
我正在学习 Flutter 并且我已经创建了一个简单的 Android 应用程序。我想遵循最佳实践,所以我还创建了一个analysis_options.yaml:
include: package:pedantic/analysis_options.yaml
linter:
rules:
public_member_api_docs: true
Run Code Online (Sandbox Code Playgroud)
Android Studio 根据analysis_options.yaml并报告违规情况正确更新其代码分析设置。
问题是,当我运行时,flutter analyze它不报告任何以下内容public_member_api_docs:
flutter analyze
Running "flutter pub get" in flutter-course... 514ms
Analyzing flutter-course...
info • Unused import: 'package:places/ui/screen/sight_list_screen.dart' • lib/main.dart:2:8 • unused_import
info • Omit type annotations for local variables • lib/ui/screen/visiting_screen.dart:166:5 • omit_local_variable_types
Run Code Online (Sandbox Code Playgroud)
但是当我运行dart analyze它时会报告大量警告:
dart analyze
Analyzing flutter-course... 2.1s
info • Document all public members at lib/constants.dart:5:16 • (public_member_api_docs)
info • Document all public …Run Code Online (Sandbox Code Playgroud) 如果编写自己的静态代码分析规则(对于C#代码),使用StyleCop和FxCop有什么优缺点?
某种类型的分析比另一种更适合吗?或者是两个在源代码上运行而另一个在编译程序集上运行的区别?
使用JoséAdan在http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/f6dec8c4-9752-4a9b-82fe-0822808fd386/提供的提示,我能够让代码分析进行拼写检查巴西葡萄牙语.
在巴西,在类型和成员名称上混合葡萄牙语和英语是一种常见的做法.我也在源自欧洲的代码中看到了其他语言的这种做法.
所以我想要做的是启用两种语言.
我没有找到任何东西,我在周围搜索,我做了一些实验,如
<CodeAnalysisCulture>en-US;pt-BR</CodeAnalysisCulture>
Run Code Online (Sandbox Code Playgroud)
和
<CodeAnalysisCulture>en-US&</CodeAnalysisCulture>
<CodeAnalysisCulture>pt-BR&</CodeAnalysisCulture>
Run Code Online (Sandbox Code Playgroud)
都没有奏效.第一个打破了编译错误,第二个使用了最后定义的语言.
我几乎可以肯定Code Analysis不支持这个,但作为最后的手段,我问:
Code Analysis是否支持为混合语言拼写检查定义两种语言?
PS:我已经知道自定义词典了.这是我的备份计划.
我发现了关于这个主题的几个问题,并且所有这些问题都有很多参考,但我仍然没有清楚的想法,因为大多数参考文献都是关于具体工具而不是关于分析的一般概念.因此我有一些问题:
关于静态分析:1.我想有一个参考,或者总结哪些技术是成功的,现在更具相关性.2.他们真正可以做些什么来发现错误,我们可以做一个总结,还是取决于工具?
关于符号执行:1.哪里可以包含符号执行?我想根据方法,我想知道它们是动态分析,还是静态和动态分析的组合,如果可以确定的话.
我找到了区分工具中两种不同技术的问题,即使我认为我知道理论上的差异.
我实际上是在提前与C合作
我有一个端点,从用户获取一个String,如下所示.
@GET
@Path("/{x}")
public Response doSomething(@PathParam("x") String x) {
String y = myService.process(x);
return Response.status(OK).entity(y).build();
}
Run Code Online (Sandbox Code Playgroud)
Checkmarx抱怨这个元素的值然后"流经代码而没有经过适当的消毒或验证,并最终在方法doSomething中显示给用户"
然后我尝试了这个:
@GET
@Path("/{x}")
public Response doSomething(@PathParam("x") String x) {
if (StringUtils.trimToNull(x) == null || x.length() > 100) {
throw new RuntimeException();
}
x = x.replace("'", "").replace("`", "").replace("\\", "").replace("\"", "")
String y = myService.process(x);
y = y.replace("'", "").replace("`", "").replace("\\", "").replace("\"", "")
return Response.status(OK).entity(y).build();
}
Run Code Online (Sandbox Code Playgroud)
但它仍然抱怨并认为这是一个高度严重的漏洞.
如何正确消毒或验证以满足Checkmarx的要求?
我最近安装了Visual Sudio 2015,并且能够使用以下命令运行解决方案的代码分析:
msbuild.exe MySolution.sln /p:RunCodeAnalysis=true
Run Code Online (Sandbox Code Playgroud)
在哪里/p:RunCodeAnalysis=true执行代码分析.实际上这会调用位于的FxCopCmd.exe
C:\Program Files(x86)\Microsoft Visual Studio 14.0\Team Tools\Static AnalysisTools\FxCop\FxCopCmd.exe
代码分析旨在取代FxCop,但实际上代码分析自身执行FxCopCmd.exe
也许我想念一些东西,但VS Code Analysis和FxCop有什么区别?