给定一个java方法,我需要确定从入口类到目标方法的所有执行路径。
例子:
目标方法:MyClass.myMethod()
执行路径:
EntryClass --calls--> Class1.method1() --calls--> Class2.method1() --calls--> Class2.method2() --calls--> MyClass.myMethod()
EntryClass --calls--> Class1.method1() --calls--> Class3.method1() --calls--> Class2.method2() --calls--> MyClass.myMethod()
EntryClass --calls--> Class3.method1() --calls--> MyClass.myMethod()
ETC。
是否有任何工具可以对我的代码库运行静态分析以确定所有这些代码执行路径?
我正在寻找 MacOS 上 C++ 的代码分析/分析工具。我知道已经有关于这个线程的帖子,但是我需要的应用程序非常具体,所以也许有人可以给我一些更具体的建议。
所以这是我的问题:我正在用 C++ 编写科学代码(硕士项目),所以它是一个纯粹的控制台应用程序,没有给出交互性。该代码应该在大规模并行计算机上运行,因此我使用 MPI。然而,现在我还没有针对可扩展性进行优化,而只是针对单核性能进行优化。由于我不想将整个程序重写为串行程序,因此我只使用带有 1 个线程的 MPI。它工作得很好,但优化器显然需要能够处理这个问题。
我想分析什么?嗯,从某种意义上说,代码并不是很复杂,因为它有一个非常简单的结构,因此我需要的只是程序在某些函数上花费多长时间的列表,这样我就知道它在哪里损失了最多的时间,并且我可以测量我的优化速度加快了。
感谢所有的想法
有没有静态代码分析工具可以发现 JNI(方法)签名字符串中的错误?例如,以下代码在语法上不正确(完全限定类名后缺少分号):
(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");
Run Code Online (Sandbox Code Playgroud)
编辑:代码分析工具不需要检查 foo/bar/TheClass 是否存在,而只需根据 JNI 规范检查字符串的语法是否有效。
这个问题的背景是,上面的代码触发了分段错误。这始终是一种烦人的调试情况,但在这种情况下静态分析应该非常容易,可以节省大量时间。
我在我的 ubuntu 桌面上运行 jenkins。在推送我的 C++ 代码之前,我需要一份静态代码分析报告。我发现保险的成本很高。我正在寻找免费的分析工具。除了 Coverity 还有其他选择吗?
我正在构建一个小型 Java 代码分析工具,想知道是否可以使用令人惊叹的 IntelliJ 编译器来获取 Java 项目的 AST?
IntelliJ几年前在 Apache 2 许可证下开源了社区版本。该项目还可以用作 Java 独立项目中的库(而不是完整 IDE 的插件)来分析 Java 项目吗?Git 存储库相当大,我很感激任何从哪里开始的提示或链接。
(我已经阅读过有关Eclipse JDT 的内容,但创建自己的 Mini-ANTLR-Java 解析器比让 Eclipse JDT 为我工作要容易得多。但如果我可以使用更复杂、始终最新的,那就太棒了-我的项目的 Java AST 的最新版本。所以我的希望寄托在 IntelliJ 编译器上。)
java parsing code-analysis intellij-idea abstract-syntax-tree
我已阅读此链接,因此对警告的含义有基本的了解。
当我对 MFC 项目运行代码分析时,我收到一系列警告:
d:\my programs\2017\meetschedassist\meeting schedule assistant\synchexclusionsdlg.cpp(295): warning C6031: Return value ignored: 'ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::LoadStringW'.
d:\my programs\2017\meetschedassist\meeting schedule assistant\synchexclusionsdlg.cpp(297): warning C6031: Return value ignored: 'ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::LoadStringW'.
Run Code Online (Sandbox Code Playgroud)
例如,它抱怨这个代码片段:
if (iImage == IMG_CHECKED)
strText.LoadString(IDS_STR_YES);
else
strText.LoadString(IDS_STR_NO);
Run Code Online (Sandbox Code Playgroud)
我已阅读LoadString的帮助文档,讽刺的是他们的示例是这样做的:
CAtlString s;
s.LoadString(IDS_APP_TITLE);
Run Code Online (Sandbox Code Playgroud)
他们也不测试返回值。:)
现在,我意识到我可以尝试修复我的代码并测试返回值 - 这将花费我很长时间!我意识到我可以下意识地忽略这些警告。
但是是否有可能在分析过程中抑制这个特定的警告(关于C6031 CString::LoadString)?
我尝试将其添加到我的stdafx.h(基于评论):
#pragma warning( disable : 6031)
Run Code Online (Sandbox Code Playgroud)
这当然有效。但我希望只是抑制 6031 错误CString::LoadString。
问题描述
我正在编写一个简单的JSON分析器,以实现JSON字符串的语法分析。我收到随机结构 JSON 字符串,并且想要导出语法结构。因此,我想要一个树结构,它描述 JSON 字符串的格式(键、值、数组等)和每个元素的类型。我已经找到了JSON的语法定义(如下所述)
object
{}
{ members }
members
pair
pair , members
pair
string : value
array
[]
[ elements ]
elements
value
value , elements
value
string
number
object
array
true
false
null
Run Code Online (Sandbox Code Playgroud)
例子
JSON 字符串:
{"widget": {
"null": null,
"window": {
153: "This is string",
"boolean": true,
"int": 500,
"float": 5.555
}
}}
Run Code Online (Sandbox Code Playgroud)
我想要得到类似的东西:
{ KEY_STR : {
KEY_STR : null
KEY_ARRAY : {
KEY_INT: VALUE_STR,
KEY_STR: VALUE_BOOL,
KEY_STR: VALUE_INT,
KEY_STR: VALUE_FLOAT …Run Code Online (Sandbox Code Playgroud) 我对 .NET Core 的各种代码分析器有点困惑。
如果您创建默认的 .NET Core Web 项目,您将获得Microsoft.CodeAnalysis.Analyzers.
另外,在NuGet上,还有Microsoft.CodeQuality.Analyzers(注意名称上的细微差别)。安装后,我发现它包含了更多的规则。
最后,还有Microsoft.CodeAnalysis.FxCopAnalyzers,它似乎包含Microsoft.CodeQuality.Analyzers。
Microsoft.CodeAnalysis.Analyzers那么、Microsoft.CodeQuality.Analyzers和 之间到底是什么关系呢Microsoft.CodeAnalysis.FxCopAnalyzers?我的项目应该有什么?
PS 创建新项目后,我在 NuGet 中搜索Microsoft.CodeAnalysis.Analyzers包(该包已存在于我的项目中)。它找到它并指出我的项目有 v1.1 并且需要将其升级到 v2.9.4。然而,根据 NuGet 的说法,v1.1 于 2015 年发布。这没有任何意义,因为我使用的是 VS2019,并且该分析器在 2015 年至 2019 年间发布了大量版本。
但是,当我将软件包升级到 2.9.4 时,分析器具有与 v1.1 相同的 3 条规则。那么我到底要升级什么?
我已经创建了一个项目并运行代码分析。后来我对规则做了一些修改,并尝试再次运行代码分析。但是在http://localhost:9000/projects的 UI 中,我找不到任何菜单或按钮来显示运行代码分析的说明。有人可以帮忙吗?
\n\n更新于 25/02/2020
\n\n例如,我正在将 SonarQube 用于 .NET (C#) 项目。当我进行代码分析时,按照 SonarQube 的建议,我将下面的 3 个命令复制到命令行中。
\n\nSonarScanner.MSBuild.exe 开始 /k:"" /d:sonar.host.url=\xe2\x80\x9c http://localhost:9000 \xe2\x80\x9d /d:sonar.login=""
\n\nMsBuild.exe /t:重建
\n\nSonarScanner.MSBuild.exe 结束 /d:sonar.login=""
\n\n如果 SonarQube 可以在http://localhost:9000/dashboard?id=的 UI 中显示这些命令,那就太好了。否则,很难记住这些命令,再次运行代码分析的唯一方法是在 SonarQube UI 中创建一个新项目。目前,我在创建项目后将这 3 个命令复制到 .bat 文件中。每次在项目配置发生一些更改后再次运行此 .bat 文件。
\n我想从 Build Pipeline 生成代码分析报告。我最近从 Fxcopcmd.exe 转移到基于 Roslyn 的分析器。我能够在构建日志中看到警告,但我无法获得可与 Comeplete 团队共享的单独报告。
我已经添加了用于运行构建期间使用的代码分析步骤的 Nuget 包,如下所示
- task: VSBuild@1
displayName: 'Build solution **\MySolution.sln'
inputs:
solution: '$(Parameters.solution)'
vsVersion: 15.0
msbuildArgs: '/t:rebuild'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
Run Code Online (Sandbox Code Playgroud) .net msbuild code-analysis roslyn-code-analysis azure-devops