Androidで開発を少し経験してきて、結局logcatのログには不要なログなど無いという結論っぽいものが見えかけてきてはいます。特にバグを追いかけている時には。(ヽ´ω`)
でも、アプリの製作中、軽くログをチェックしたい時には、ある程度情報を絞りたいのも事実です。
僕の場合は、Eclipseのlogcatと、ターミナルでフィルタ表示させるlogcatを併用して、その時々で観る方を変えるようにしています。
スクリプトはRubyで作りました。
スクリプト名は logcut.rb です。ログカットとお呼びください。
# 使い方 # logcatのフォーマットは -v threadtime で表示した時を想定しているので注意。 # adb logcat -v threadtime | ruby logcut.rb "cocos2d-x debug info" searchTag = nil # サーチするタグ searchPid = nil # サーチしたタグのPID if ARGV.size>0 searchTag = ARGV.shift end $stdin.each_line do |line| if searchTag!=nil if line =~ /^\d+-\d+\s+\d+:\d+:\d+\.\d+\s+([0-9]+)\s+([0-9]+)\s+(.+):.+$/ tag = $3 if tag.include?(searchTag) pid = $1.to_i if searchPid!=pid print "\n注意: サーチするPIDを変更します。(#{searchPid} -> #{pid})\n\n" searchPid = pid end print line else # タグが違ってもPIDが同じなら表示する if searchPid!=nil pid = $1.to_i if searchPid==pid print line end end end end else print line end end
使い方は、ターミナルから adb logcat コマンドに、パイプで繋いでやります。
なお、logcatのフォーマットは -v threadtime オプションを付けて表示した時を想定しているので、別のフォーマットで表示させたい場合は、おのおのスクリプトを変更して下さい。
logcut.rb には、検索するタグをパラメータに渡します。タグにスペースがある場合は、" で括って下さい。
例えば、cocos2d-x v3系の場合ですと、以下のようにしてやります。
$ adb logcat -v threadtime | ruby logcut.rb "cocos2d-x debug info"
logcut.rbの仕事は、ログの中に検索タグの文字列が含まれているかをチェックして、見つけたらこれを表示します。
ただこれだけだと grep コマンドと変わらなく単なるアホになってしまいますので、検索タグを見つけたら、そのログの PID を記憶しておき、検索タグ見つからなくても PID が同じならそのログも表示するようにしています。
これを使うとどうなるのか、見てもらった方が早いので、以下にとあるcocos2d-xプロジェクトの実行中のログを晒しておきます。
07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: { 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: cocos2d.x.version: cocos2d-x 3.2beta0 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: cocos2d.x.compiled_with_gl_state_cache: true 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_S3TC: true 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: cocos2d.x.build_type: DEBUG 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_vertex_array_object: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: cocos2d.x.compiled_with_profiler: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.renderer: NVIDIA Tegra 3 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.vendor: NVIDIA Corporation 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.version: OpenGL ES 2.0 14.01003 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_ATITC: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_ETC1: true 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.max_texture_units: 16 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_PVRTC: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.max_texture_size: 2048 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_NPOT: true 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_discard_framebuffer: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: gl.supports_BGRA8888: false 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: } 07-29 14:06:05.539 8698 8724 D cocos2d-x debug info: 07-29 14:06:05.589 8698 8724 D cocos2d-x debug info: create _backToForegroundlistener for GLProgramState 07-29 14:06:05.599 8698 8724 D main : cocos_android_app_init 07-29 14:06:05.629 8698 8724 D cocos2d-x debug info: Resolution Size = (640.000000,368.000000) 07-29 14:06:05.629 8698 8724 D CCFileUtilsAndroid.cpp: relative path = resolution/hd/SampleTex.plist 07-29 14:06:05.639 8698 8724 D CCFileUtilsAndroid.cpp: relative path = resolution/hd/SampleTex.png 07-29 14:06:05.659 8698 8724 D CCFileUtilsAndroid.cpp: relative path = CloseNormal.png 07-29 14:06:05.659 8698 8724 D CCFileUtilsAndroid.cpp: relative path = CloseSelected.png 07-29 14:06:05.669 8698 8724 D cocos2d-x debug info: cocos2d: fullPathForFilename: No file found at Arial. Possible missing file. 07-29 14:06:05.669 8698 8724 D CCFileUtilsAndroid.cpp: relative path = HelloWorld.png
最初の cocos2d-x debug info タグを見つけた時に、PID(今回は 8698番)を記憶しておきます。それ以降は、cocos2d-x debug info タグが見つからないログでも、PIDが一致するならば表示します。上の例ですと、mainタグ、CCFileUtilsAndroid.cppタグがそうです。
このような仕様にしたのは、アプリが起動するまで PID (プロセスID) が分からないので苦肉の策なのですが、検索タグが違うだけでログをdiscardしてしまうと、思わぬ貴重な情報を見落としてしまう可能性があります。
使ってみるとなかなか便利です。
0 件のコメント:
コメントを投稿