我正在寻找一种工具来告诉/解决每个函数的所有调用路径(称之为"路由").
例如:
void deeper(int *pNumber)
{
*pNumber++;
}
void gateA(int *pNumber)
{
deeper(pNumber);
}
void gateB(int *pNumber)
{
gateA(pNumber);
}
void main()
{
int x = 123;
gateA(&x);
gateB(&x);
}
Run Code Online (Sandbox Code Playgroud)
看到?我需要一个工具来告诉我更深层次的所有路线(),如果可能的话还有更多.
通过说"更多"我的意思是它会告诉我指针是否与提供给调用函数的指针相同.
这将大大节省我的时间.谢谢!
几年前,我读了一篇关于分析大型代码库的简洁方法的文章.
我们的想法是缩小到目前为止压痕和块长度的模式都是真正可见的.
作者写了关于使用非常小的字体打印代码并查看10英尺后面的结果的文章.我相信作者还有一些工具可以重新格式化代码并为这种技术生成图像,从而可以避免使用纸张.
我无法找到合适的搜索查询来实现这一目标.有人有主意吗?
我需要一个默认值集和许多不同的页面访问和更新..最初我可以像这样在类构造函数中设置默认值吗?在C#.NET中执行此操作的正确方法是什么?
public class ProfitVals
{
private static double _hiprofit;
public static Double HiProfit
{
get { return _hiprofit; }
set { _hiprofit = value; }
}
// assign default value
HiProfit = 0.09;
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码的findbugs错误,
if( obj instanceof CustomerData )
{
CustomerData customerData = (CustomerData)obj;
if (customerData == null)
{
errors.reject("Error", "Null data received");
}
}
Run Code Online (Sandbox Code Playgroud)
错误说明:
obj的冗余nullcheck,已知为非null(包名和方法名称,我因安全违规而删除)
此方法包含对常量null的已知非空值的冗余检查.
请告诉我这里的错误是什么.
我从代码分析(VS2010 Premium)获得了以下不产生CA1804警告的代码(从未使用过声明的变量):
...
if( boolVariable )
{
string errorText = "Bla Bla Bla"; // Never used
ErrorProvider.SetError( SomeControl, "Some Warning" );
}
else
{
string errorText = "Acme Acme Acme"; // Used below
ErrorProvider.SetError( SomeControl, errorText );
}
...
Run Code Online (Sandbox Code Playgroud)
当我删除ErrorProvider.SetError(...)行时,会显示CA1804警告,但为什么上面的代码示例中不是这种情况?
(顺便说一句:代码本身并不太好,只是为了说明我的问题.)
可能导致这种行为的任何想法?我想这可能是因为IL代码的优化方式是将声明置于if之外,这反过来意味着警告确实不会出现在上面的例子中,但是我我不确定这是否属实.
提前致谢
G.
我有一个功能,我认为我已经修复了代码分析中的CA2000警告,但它不会消失.警告在SqlCommand上.这是功能:
protected internal void LogUserSession(int? managerID)
{
using (var sqlCommand = new SqlCommand())
{
sqlCommand.SetCommand("usp_UserActivity_Create");
SqlParameter prmSessionID = new SqlParameter();
prmSessionID.ParameterName = "@sessionID";
prmSessionID.Direction = ParameterDirection.Input;
prmSessionID.SqlDbType = SqlDbType.VarChar;
prmSessionID.Size = 32;
prmSessionID.SetValue(SessionID);
SqlParameter prmUsername = new SqlParameter();
prmUsername.ParameterName = "@username";
prmUsername.Direction = ParameterDirection.Input;
prmUsername.SqlDbType = SqlDbType.VarChar;
prmUsername.Size = 32;
prmUsername.SetValue(Username);
SqlParameter prmLoginID = new SqlParameter();
prmLoginID.ParameterName = "@loginID";
prmLoginID.Direction = ParameterDirection.Output;
prmLoginID.SqlDbType = SqlDbType.Int;
sqlCommand.Parameters.Add(prmSessionID);
sqlCommand.Parameters.Add(prmUsername);
sqlCommand.Parameters.Add(prmLoginID);
using (sqlCommand.Connection = new SqlConnection(ConnectionStrings.MainApp))
{
sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQueryTryCatch();
if (prmLoginID.Value != DBNull.Value) …Run Code Online (Sandbox Code Playgroud) 我有一个遗留代码库,我需要分析和确定依赖项.特别是对类(内部/外部)和扩展(Memcache,PDO等)的依赖.
我已经回顾了在PHP文件中是否有静态代码分析器中列出的工具?.不幸的是,这篇文章已经过时了,像phpCallGraph这样的大多数有前途的工具都不再适用.
我的想法是用词法分析代码并寻找类令牌.查看这些列表至少可以让我直观地确定依赖关系.但是,在以下代码中查找OtherClass可能很复杂:
$classname = 'OtherClass';
echo $classname::doubleColon();
Run Code Online (Sandbox Code Playgroud)
最后,我怀疑我是第一个需要这个的人.我确信存在一种工具或工具组合来提供我需要的东西.所以我在自己写这篇文章之前就问SO社区.
理想情况下,此工具将分析具有完整代码覆盖率的多个文件 因此,像Xdebug这样的工具虽然很棒,但并不能解决这个问题.
Resharper最有用的代码分析工具之一是,如果在解决方案中找不到用法,则将符号标记为未使用.
不幸的是,单元测试所涵盖的任何符号都被视为已使用.
=> 我正在寻找一种忽略此用法分析的单元测试的方法.
通过Resharper选项扫描,我找到了一个标有"编辑要跳过的项目"的按钮.它有一个很长的描述文本,除其他外,"...如果解决方案中的某个符号仅用于您跳过的文件中,则此符号将突出显示为从未使用过."
这听起来就像我想要的那样.但是通过将单元测试项目放在跳过列表上不仅可以显示任何有效的未使用符号,它只会禁用测试项目的整个代码分析.当然我仍然希望编写好的单元测试代码,从而利用Resharper的所有代码分析功能.我只是不想计算测试项目之外的符号用法.
有任何想法吗?
因此,我的最终目标是通过确保项目导入的所有实体都存在于其声称使用的版本中来评估cabal文件中依赖项的准确性.
一个好的开始是找到单个源文件使用的所有导入实体的列表,可选地提供有关它们来自何处的信息.
我现在愿意忽略类实例的情况,因为检测它们的使用并不是那么简单.
理想的答案是指向一个完全如此的工具,但我也会接受一个答案,指出我需要自己编写一个资源(GHC收集这些信息吗?它会把它转移到哪里吗?可以吗?被说服这样做?)
我试图编译.NET项目并出现此CA,但是我在MSDN上找不到任何关于它的信息,你知道如何解决它吗?