是否有任何C语言静态分析器可以在C代码体中创建数据结构的图形图表?
我正在考虑DDD(数据显示调试器)中的数据显示,但这些工作来自源代码的静态分析.
任何图表符号欢迎(UML等),它可以在任何平台上运行.
谢谢.
昨天我在这里发布了一个问题(FxCop和代码分析规则),关于让FxCop运行与Code Analysis相同的规则,我认为它已经解决了.
然而,似乎没有真正的方法让FxCop运行与Visual Studio 2010的代码分析相同的一组规则.例如,一旦我使用我的FxCopCmd设置完成所有工作,它就开始咆哮着像CA2000这样的最小推荐规则规则集中表示的规则.如果我删除规则它不喜欢它运行分析,一切看起来不错...除了它真的没有运行相同的规则集!
这对我来说似乎有点疯狂!反正有没有让FxCop分析Visual Studio Code Analysis可以分析的完全相同的规则集?是否有.dll要添加到要分析的规则以获取CA2000和其他规则?
continuous-integration code-analysis fxcop visual-studio-2010
问题是VS2010代码分析正在为特定功能返回两个CA2000警告.我没有成功用较小的代码块重现警告,所以我已经完整地发布了原始函数.
public int SaveTransaction( Transaction tx, UserAccount account ) {
if ( tx == null ) {
throw new ArgumentNullException( "tx" );
}
if ( account == null ) {
throw new ArgumentNullException( "account" );
}
bool isRefund = tx.TransactionType == LevelUpTransaction.TransactionTypes.Refund;
int pnRef = 0;
using ( SqlConnection conn = new SqlConnection( DatabaseConfiguration.ConnectionString ) ) {
using ( SqlCommand cmd = new SqlCommand( "dbo.SaveTransaction", conn ) ) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( "@InvoiceId", SqlDbType.VarChar, 100 ).Value = tx.InvoiceNumber;
cmd.Parameters.Add( …Run Code Online (Sandbox Code Playgroud) 最近,我一直在努力在项目中启用更多的Visual Studio代码分析规则。但是,我一直碰到规则CA2227:“集合属性应该是只读的”。
说我有一个像这样的模型类:
public class Foo
{
public string Name { get; set; }
public List<string> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个映射很深的视图页面:
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.Name)
@Html.EditorFor(m => m.Name)
for (int i = 0; i < Model.Values.Count; i++)
{
<br />
@Html.LabelFor(m => Model.Values[i]);
@Html.EditorFor(m => Model.Values[i]);
}
<button type="submit">Submit</button>
}
Run Code Online (Sandbox Code Playgroud)
使用ASP.NET MVC,我可以在控制器中编写一个动作,该动作将自动将该输入绑定到type类型的类Foo:
[HttpPost]
public ActionResult ProcessForm(Foo model)
{
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,我的List<string>自动属性违反了规则CA2227。如果不进行模型绑定,则可以使该属性为只读,并在其他位置填充该集合。但是,该方法不适用于默认的模型绑定器。目前,我只是在视图模型中添加抑制消息。
有没有一种方法可以在不违反CA2227的情况下绑定模型中的项目集合?还是在这里添加抑制消息是我最好的选择?
我正在寻找一种方法来检查我的C项目,编译成ELF,是否有未使用的函数,并找到它们.这是声明的函数,但在我的代码中没有被调用.
解决方案可以是以下之一:
解决方案不能是以下之一:
gprof(有些函数需要几天才能调用它们,但在代码流中你可以看到它们最终被调用)谢谢
以下代码为Main的第一行生成CA2000(" 丢失范围之前的Dispose对象 ")违规,但不生成第二行.我真的很喜欢第二行的CA2000违规,因为这是我工作的大型代码库中常见的(显然简化的)模式.
有谁知道为什么第二行没有产生违规?
public static void Main()
{
new Disposable();
MakeDisposable();
}
private static Disposable MakeDisposable() { return new Disposable(); }
private sealed class Disposable : IDisposable
{
public void Dispose()
{
}
}
Run Code Online (Sandbox Code Playgroud) 所以我试图运行一系列在RuleSet中定义的规则.RuleSet文件实际上是使用Sonarqube生成的 - 我已经选择了绝对的所有规则,包括FxCop,ReSharper和StyleCop规则.我正在开这样的FxCop:
C:/FxCop/FxCopCmd.exe /file:C:\TestProject\bin\TestProject.dll /ruleset:=C:\TestProject\testproject.ruleset /out:C:\TestProject\fxcop-report.xml /outxsl:none /forceoutput /searchgac /aspnet
Run Code Online (Sandbox Code Playgroud)
它正确启动,但我收到以下消息:
初始化Introspection引擎...
分析...
初始化Phoenix引擎......
分析...
分析完成.
*1总分析引擎异常.
XML输出包含以下内容:
<Exception Keyword="CA0001" Kind="Engine">
<Type>Phx.FatalError</Type>
<ExceptionMessage>Exception of type 'Phx.FatalError' was thrown.</ExceptionMessage>
<StackTrace> at Phx.FatalError.Dispatch()
at Phx.Logging.Diagnostics.DiagnosticMessage.LogMessage(Severity severity, DiagnosticInfo diagnosticInfo, SourceContext sourceContext, String descriptionString)
at Phx.PE.PEUtilities.UserError(String infoMessage)
at Phx.Pdb.ReaderImplementation.Open(Boolean loadTypeOnly)
at Phx.PEModuleUnit.LoadPdb()
at Phx.PE.ReaderPhase.CheckSymbolicInformation()
at Phx.PEModuleUnit.LoadGlobalSymbols()
at Phx.PEModuleUnit.LoadEncodedIRUnitList()
at Phx.PEModuleUnit.GetEnumerableContributionUnit(ContributionUnitEnumerationKind contributionUnitEnumerationKind)
at Phx.PEModuleUnit.GetEnumerableContributionUnit()
at Microsoft.FxCop.Engines.Phoenix.PreScanPass.GetFunctionUnits(PEModuleUnit peModuleUnit)
at Microsoft.FxCop.Engines.Phoenix.PreScanPass.Execute(ModuleUnit moduleUnit)
at Phx.Passes.Pass.DoPass(ModuleUnit moduleUnit)
at Phx.Passes.PassList.DoPassList(ModuleUnit moduleUnit)
at Microsoft.FxCop.Engines.Phoenix.PhoenixAnalysisEngine.Host.ExecutePasses(PEModuleUnit peModuleUnit)
at Microsoft.FxCop.Engines.Phoenix.PhoenixAnalysisEngine.AnalyzeInternal()
at Microsoft.FxCop.Engines.Phoenix.PhoenixAnalysisEngine.Analyze()
at …Run Code Online (Sandbox Code Playgroud) 使用VS2015中的Microsoft.CodeAnalysis.CSharp.Workspaces的RC2,此代码抛出异常:
var tree = CSharpSyntaxTree.ParseText(...);
var workspace = new AdhocWorkspace();
var newRoot = Simplifier.Expand(tree.GetRoot(),
compilation.GetSemanticModel(tree, false),
workspace,
n => true,
true,
CancellationToken.None);
Run Code Online (Sandbox Code Playgroud)
异常消息是"不支持语言'C#'."
我缺少什么让这项工作?
我刚刚在VS2015中打开了一个现有项目,虽然它在VS2013中都很开心,但我现在在VS2015中遇到CS3002"返回类型不符合CLS"等错误.
我已经检查了项目属性并且未选中"在构建时启用代码分析",并查看了VS2015中的更改,但我不能在我的生活中看到为什么现在出现这些错误的任何原因.Visual Studio中有什么变化吗?
code-analysis ×10
c# ×4
fxcop ×4
c ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
boost ×1
c++ ×1
c++11 ×1
dead-code ×1
gcc ×1
idisposable ×1
roslyn ×1
utility ×1