2013年6月10日月曜日

[Tizen]Tizenアプリのログ出力方法とかについてドキュメント確認してみた

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenアプリのログ出力方法とかについてドキュメント確認してみた

TizenのドキュメントのDebugging Macros(ログとかデバッグに関する記述)について確認したのでメモ。 なお、PCのスペックが低くて、実際確認ほぼできず、ドキュメントを意訳した内容となります。

確認はTizenSDK2.1となります。

ドキュメントの詳細は公式サイトのDebugging Macrosを参照ください。

LogViewの表示

以下の操作でTizenIDEより表示出来ます。

Window→Show View→Log

ほとんどAndroidの奴と一緒っぽい感じ。

  • ログレベルによるフィルタリング
  • タグによるフィルタリング
  • ログのエクスポート
  • ログのクリア

とか出来るっぽいです。

ログの書き方

何やら大きく分けて4種類も有るみたい。

  1. Log Macros
  2. Try Macros
  3. Assert Macros
  4. Secure Log Macros

1.Log Macros

すごく普通のログ。

ログレベル指定

ログレベル(info,debug,error)を呼び出すメソッドによって切り替え、引数には表示するログメッセージを設定。

以下記述例。

AppLog("Initialization successful.");

また、以下に各ログレベルでの記述方法を記載します。

  • AppLog(message)
  • AppLogDebug(message)
  • AppLogException(message)

一番上のAppLogはInfoレベルで、AppLogDebugがDebugレベル、AppLogExceiptionがErrorレベルでの出力となります。

条件付きログ出力

第一引数(expression)の条件式がtrueの場合のみログ出力する事も出来る。

以下記述例。

int initVal;

// If initVal is greater than 0, print the info message to the console
AppLogIf(initVal > 0, "initVal is %d.", initVal);

上記のように記載すると変数initvalが0より大きい場合のみログを出力する事が出来ます。 また、以下に各ログレベルでの記述方法を記載します。

  • AppLogIf(expression, message)
  • AppLogDebugIf(expression, message)
  • AppLogExceptionIf(expression, message)

タグ付け

フィルタリングしやすいようにタグを付けてログ出力も出来る。

以下記述例。

AppLogTag("MyTag", "Initialization successful.");

また、以下に各ログレベルでの記述方法を記載します。

  • AppLogTag(tag, message)
  • AppLogDebugTag(tag, message)
  • AppLogExceptionTag(tag, message)

2.Try Macros

条件式結果によってhogeしてからログ出力…みたいな事が出来たりします。なお、ログレベルは一律でError

後述するAssert Macrosとの違いとしてこちらのTry MacrosではプロセスKillはしないみたいです。

TryCatch(condition, expressions, message)

実例を見た方が分かりやすいので、以下記述例。

const A*
MyClass::DoSomething(const wchar_t* pValue)
{
    result r = E_SUCCESS;
    // Do something

// If pValue is null, print "[E_INVALID_ARG] The pValue is null." to the console, 
// execute the expression "r = E_INVALID_ARG", and move to CATCH
TryCatch(pValue != null, r = E_INVALID_ARG, "[E_INVALID_ARG] The pValue is null."); 

SetLastResult(E_SUCCESS);

return _pValue;

CATCH:
  SetLastResult(r);

  return null;
}

英語で書いてある通りですが、

  1. pValueがnullか判断。(conditionの条件式)
  2. pValueがnullの場合、ログで[E_INVALID_ARG] The pValue is null.とErrorレベルのログを出力。
  3. 変数rに定数E_INVALID_ARGを代入。
  4. Catch構文に遷移。

という流れみたいです。

TryReturn(condition, returnValue, message)

条件式(condition)で結果がfalseの場合、messageを出力して、returnValueに記載された値を返却する。

TryReturnVoid(condition, message)

条件式(condition)で結果がfalseの場合、messageを出力して、returnするけど値は設定しない(void)と。

TryLog(condition, message)

条件式(condition)で結果がfalseの場合、messageを出力してその後の処理を継続。(returnしない)

タグ付け

上記それぞれのメソッドで引数が一つ増えてタグを付けるものがありますが、説明は省略。

3.Assert Macros

条件式(condition)の内容がfalseの場合、なんとプロセスkillするそうです!

リリースビルドではやめてね、って書いてあります。

AppAssert(condition)

条件式(condition)で結果がfalseの場合、現在のプロセスをkillする。(ログ出力なし)

AppAssert(condition, message)

条件式(condition, message)で結果がfalseの場合、messageの内容をエラーレベルのログとして出力し、現在のプロセスをkillする。

4.Secure Log Macros

基本的にLog Macros,Try Macrosと似たメソッドがあるが、以下の点が違うようです。

  • 「_SECURE_LOG」を定義していればログを出力するし、なければコンパイルタイミングで消す。
  • 出力ログ文字列の先頭にprefixとして[SECURE_LOG]を追加

一つの目の点が大きな違いですね。(すいません、C++があまり分からず、_SECURE_LOGを定義、というのが具体的に何をすれば良いのか分かってません。。値はいれず、単純に宣言すればよい?)

という事で以下はメソッドのみ記述。

  • AppSecureLog(message)
  • AppSecureLogDebug(message)
  • AppSecureLogException(message)
  • AppSecureLogTag(tag, message)
  • AppSecureLogDebugTag(tag, message)
  • AppSecureLogException(message)
  • AppSecureLogTag(tag, message)
  • AppSecureLogDebugTag(tag, message)
  • AppSecureLogExceptionTag(tag, message)
  • SecureTryCatch(condition, expressions, message)
  • SecureTryReturn(condition, returnValue, message)
  • SecureTryReturnVoid(condition, message)
  • SecureTryLog(condition, message)
  • SecureTryCatchTag(tag, condition, expressions, message)
  • SecureTryReturnTag(tag, condition, returnValue, message)
  • SecureTryReturnVoidTag(tag, condition, message)
  • SecureTryLogTag(tag, condition, message)

0 件のコメント:

コメントを投稿