只是一个简单的问题.我使用Ubuntu作为服务器和桌面.有没有人有一个很好的access.log分析器的想法?它可能是我下载到桌面或服务器的程序.谢谢.
在我的项目中的第三方库中,单例sharedInstance方法似乎在最终的return_sharedInstance行中抛出了一个分析器警告:
+ (BlockBackground*)sharedInstance
{
if (_sharedInstance != nil) {
return _sharedInstance;
}
@synchronized(self) {
if (_sharedInstance == nil) {
[[[self alloc] init] autorelease];
}
}
return _sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,实际修复此警告的正确方法是什么?另外我已经看到你不应该在这样的方法中做自我分配,这是真的吗?
谢谢!
我有点复杂的情况.我必须创建分析器/代码修复提供程序,例如仅分配参数但从未使用过,或者从不使用本地变量.
对于参数情况,我要进行方法声明并查看参数列表以获取所有分析器.我正在遍历方法中的赋值表达式,并且我过滤了使用辅助方法分配的参数.
它变得模糊的地方我不知道何时使用局部变量/参数.我已经完成了符号,但他们无法告诉我使用/未使用的变量.我可以尝试通过在字符串中转换方法声明语法上下文来查找方法中提到变量名称的次数,并查找已分配的参数,但这只是一个很糟糕的想法.
我真的被困住了,我会从那些曾经遇到过这种情况的人那里得到一些帮助.
对于可能会问的人,我主要是在寻找分析仪缺失的逻辑.我不知道代码修复提供程序将如何工作.如果您对我能做的事情有所了解,请随意将其包含在您的答案中!截至目前,我认为可以从方法中删除未使用的局部变量,同样可以使用未使用的参数.我现在不确定.
UPDATE
我现在正在尝试使用DataFlow API,但目前它并不适合我.这个帖子最古老的答案给了我一个起点,但实际上并没有起作用.
我想出了自己的方式:
private static bool IsLocalVariableBeingUsed(VariableDeclaratorSyntax variableDeclarator, SyntaxNodeAnalysisContext syntaxNode)
{
var model = syntaxNode.SemanticModel.Compilation.GetSemanticModel(variableDeclarator.SyntaxTree);
var methodBody = variableDeclarator.AncestorsAndSelf(false).OfType<MethodDeclarationSyntax>().First();
var lastMethodNode = methodBody?.ChildNodes().LastOrDefault();
if (lastMethodNode == null)
return false;
var readWrite = syntaxNode.SemanticModel.AnalyzeDataFlow(variableDeclarator, lastMethodNode);
}
Run Code Online (Sandbox Code Playgroud)
但这也行不通.使用NUnit测试时:
var input = @"
class TestClass {
void TestMethod ()
{
int i;
}
}";
Run Code Online (Sandbox Code Playgroud)
当运行时到达readWrite或result(从最旧的答案)时,我收到以下消息:
System.ArgumentOutRangeException Index was out of range Must be non negative and lesser than the size of the collection"
Run Code Online (Sandbox Code Playgroud)
但在此之前,在我的分析器中,当我尝试验证我的节点以确保它不是null并为数据流API创建适当的元素时,没有代码中断(不确定这是否是合适的术语)但是此刻我无法进步.
某些字符被视为像# 这样的分隔符,因此它们在查询中永远不会匹配。最接近标准的自定义分析器配置应该是什么,以允许匹配这些字符?
我想弄清楚房产是否是汽车房产,即
public int Foo { get; set; }
盯着看了一会儿PropertyDeclarationSyntax,IPropertySymbol却没有发现什么。
我猜另一种方法是一种扩展方法,它评估 if get&set不包含任何语句是一种方法,但感觉不是很优雅。
使用以下代码,分析器将setMyDict选择器调用标记为潜在泄漏,并且在dealloc中指出"调用者此时不拥有引用计数的不正确减少"
- (id)init {
if (self = [super init]) {
[self setMyDict:[[NSMutableDictionary alloc] init]];
}
return self;
}
- (void)dealloc {
[[self myDict] release];
[super dealloc];
}
@synthesize myDict = _myDict;
Run Code Online (Sandbox Code Playgroud)
我不明白.我想,使用alloc init,对象会将保留计数增加1,指针会通过合成属性存储在_myDict中.如果我使用此代码
- (id)init {
if (self = [super init]) {
_myDict = [[NSMutableDictionary alloc] init];
}
return self;
}
- (void)dealloc {
[_myDict release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
分析师不抱怨.我错过了什么?
我收到了以下警告Comparison of unsigned expression < 0 is always false.
我不确定如何修复它?
if(topWindowIndex < 0)
Run Code Online (Sandbox Code Playgroud)
它的定义是......
NSUInteger topWindowIndex = [allWindows count] - 1;
Run Code Online (Sandbox Code Playgroud) 我已将以下变量声明为实例变量并在我的m文件中使用它,但是我收到了警告.
TransparentToolbar *tools;
Run Code Online (Sandbox Code Playgroud)
在线分配的对象的潜在泄漏......
我已经尝试过为它创建一个属性,例如..
@property (nonatomic, retain) TransparentToolbar *tools;
Run Code Online (Sandbox Code Playgroud)
并合成并释放它,但我的视图在dealloc结束时崩溃.
我究竟做错了什么 ?
在pickerSortingDataCurrent上编辑相同的警告......
h
@interface myViewController : UIViewController <UIActionSheetDelegate,
UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDelegate,
UITableViewDataSource, MFMailComposeViewControllerDelegate> {
TransparentToolbar *tools;
NSArray *pickerSortingDataCurrent;
}
@property (nonatomic, retain) TransparentToolbar *tools;
@property (nonatomic, retain) NSArray *pickerSortingDataCurrent;
m
@synthesize pickerSortingDataCurrent;
@synthesize tools;
- (void)viewDidLoad {
[super viewDidLoad];
tools = [[[TransparentToolbar alloc]
initWithFrame:CGRectMake(0, 0, 70, 44.01)] autorelease];
tools.barStyle = UIBarStyleBlackOpaque;
self.pickerSortingDataCurrent = [[NSArray alloc] initWithObjects:
@"Next Date Ascending",
@"Next Date Descending", nil]; // removed some items here …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的自定义分析器中的TokenStream上应用多个过滤器.以下是代码:
public class CustomizeAnalyzer extends Analyzer {
//code omitted
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);
TokenStream filter = new LowerCaseFilter(Version.LUCENE_44, source);
filter = new StopFilter(Version.LUCENE_44, filter, stopWords);
return new TokenStreamComponents(source, new PorterStemFilter(source));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,不会使用LowerCaseFilter.我真的按照这里的文档.有人可以解释一下如何让它发挥作用吗?
非常感谢,
我有一个3000个记录的大而凌乱的string.xml文件,其中的大多数值都是无用的,并且从未在代码中使用过。我想自动查找并忽略那些无用的记录。有没有办法在string.xml文件中查找无用的记录?
android analyzer android-resources android-studio string.xml
analyzer ×10
xcode ×4
c# ×2
cocoa-touch ×2
memory-leaks ×2
objective-c ×2
roslyn ×2
android ×1
filter ×1
ios ×1
iphone ×1
java ×1
logging ×1
lucene ×1
singleton ×1
statistics ×1
string.xml ×1