3

バージョン252チェッカーバイナリを使用してコードを実行すると、分析エラーは発生しません。ただし、最新の253チェッカーを使用するように変更すると、多数のエラーが返されますが、これらはすべて意味がありません。たとえば、scan-buildスクリプトが完了した後にSafariブラウザに表示されるエラーの画像を次に示します。

Clang静的アナライザーエラー

これは、エラーリストに表示されるかなり一般的なエラーです。ご覧のとおり、メソッド名の最後にCopyがありますが、それでも誤った名前として報告されています。

チェッカーバージョン253で発生しているエラーの内訳は次のとおりです。

Bug Summary

Results in this analysis run are based on analyzer build checker-253.

Bug Type    Quantity
All Bugs    83  

Dead code   
Unreachable code    17  

Memory (Core Foundation/Objective-C)    
Bad release 19  
Leak of returned object 23  
Object sent -autorelease too many times 24

自動解放エラーは、アナライザーがCopyメソッドが実際に正しく名前が付けられていることを認識できないという事実に関連しているようで、到達不能コードの例を探しようとしましたが、それらのパターンや説明を実際に見つけることができませんでしたエラーは、単純なifステートメント内のすべてのコード行であったためです。次に例を示します。

さらに別のClangアナライザーエラー

これは、チェッカーの最新バージョンで導入されたバグであり、エラーとして表示される可能性があると思います。ここで見逃している可能性のある他の何か(ある種のビルド設定またはscan-buildスクリプトの問題)はありますか?

4

1 に答える 1

5

まず、メソッド名は大文字ではなく小文字で始める必要があります(URLなどの省略形は保存してください)。静的アナライザーが大文字の「Get」をトリップしている可能性があります。

次に、小文字の「get」を使用しても、メソッドは規則に従いません。

ドキュメントを引用するには:

「get」は、オブジェクトと値を間接的に返すメソッドにのみ使用してください。このフォームは、複数のアイテムを返す必要がある場合にのみメソッドに使用する必要があります。

したがって、アナライザーは問題を正しく識別しています。

ガイドラインに従い、次のようなものを使用することをお勧めします。

+ (NSArray *) modifiedOrNewPeople: (FMDatabase *) aDatabase;

これにより、自動解放されたアレイが解放されます。自動解放されたオブジェクトを返すことができない何らかの理由がある場合は、コメントしてください。

于 2011-01-08T08:06:45.503 に答える