iPhone/iPadアプリ開発、Clangでメモリリークを診断!

clang preview 2

iPhoneアプリ開発。
CGI開発はメモリをそこまで意識する必要がなかったが、
iPhoneだとそういうわけにはいかない。
メモリリークが命取りになったりする。
今までメモリを意識する必要があまりなかったのでアプリ開発で手こずる。
メモリについて調べてると静的解析プログラムが発見。
早速導入してみる。

Clang
http://clang-analyzer.llvm.org/

導入方法は下記サイトが分りやすかったので省略。
http://tktech.blog21.fc2.com/blog-entry-1.html

ただ実行すると下記のようなエラーがでる。

$ scan-build –view xcodebuild
Build settings from command line:
GCC_PRECOMPILE_PREFIX_HEADER = NO

=== BUILD NATIVE TARGET **************** OF PROJECT **************** WITH THE DEFAULT CONFIGURATION (Release) ===
Check dependencies
2011-07-09 14:04:30.199 xcodebuild[430:3e03] error: Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x2006820e0 “Non-zero exit code 255 returned from shell command: /Users/********/bin/checker-257/libexec/ccc-analyzer -v -E -dM -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -x objective-c -c /dev/null 2>&1”
2011-07-09 14:04:30.199 xcodebuild[430:3e03] Warning: Couldn’t discover the ‘ccc-analyzer’ compiler’s built-in search paths and preprocessor definitions for language dialect ‘objective-c’.
Compiler: /Users/********/bin/checker-257/libexec/ccc-analyzer
Reason: /Users/********/bin/checker-257/libexec/ccc-analyzer -v -E -dM -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -x objective-c -c /dev/null 2>&1
2011-07-09 14:04:30.266 xcodebuild[430:3e03] error: Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x200662dc0 “Non-zero exit code 255 returned from shell command: /Users/********/bin/checker-257/libexec/ccc-analyzer -v -E -dM -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -x c -c /dev/null 2>&1”
2011-07-09 14:04:30.266 xcodebuild[430:3e03] Warning: Couldn’t discover the ‘ccc-analyzer’ compiler’s built-in search paths and preprocessor definitions for language dialect ‘c’.
Compiler: /Users/********/bin/checker-257/libexec/ccc-analyzer
Reason: /Users/********/bin/checker-257/libexec/ccc-analyzer -v -E -dM -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -x c -c /dev/null 2>&1
[BEROR]Code Sign error: The identity ‘iPhone Developer’ doesn’t match any valid certificate/private key pair in the default keychain

** BUILD FAILED **

The following build commands failed:
Check dependencies
(1 failure)
scan-build: Removing directory ‘/var/folders/5L/5LArFBTHG3GLpCvSyzE9GE+++TI/-Tmp-/scan-build-2011-07-09-1’ because it contains no reports.

上記を解決するには下記のようにデバック用のSDKを指定してあげればよい。
iPhone Sumulatorを4.3に指定した場合。

$ scan-build xcodebuild -configuration Debug -sdk iphonesimulator4.3

成功すると下記のようなHTMLが生成される。

プレビュー 1
clang preview 1

どのファイルの何行目がメモリリークしてるか教えてくれる。

プレビュー 2
clang preview 2

プレビュー 3
clang preview 3

メモリ管理つにいての参考サイト

IBを使わずに作るiPhoneアプリ作成入門:第3回