tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:System.debugについて

昔教わって気に入ってるやり方なのですが、Apex開発をするときにメソッドの最初と最後にSystem.debugでSTARTとENDを表示するようにしておくと調査が必要になったときに便利です。
STARTとENDは '◆◆◆◆' 。その間のDebugは '◆◆' のような感じ区別すると確認しやすいです。


上記の場合、次のログを確認できます。

f:id:tyoshikawa1106:20130622112623p:plain


System.debugもステップ数を消費してしまうので、通常はSTARTとENDだけつけておいて調査が必要になったときに中間の '◆◆' をいれて確認するみたいなやり方がいいんじゃないかと思ってます。STARTとENDだけでも途中で処理が止まっていた場合はENDが表示されないのでそのメソッドを調査するというような判断ができると思います。

共通クラスや値を返すだけのメソッドにはSystem.debubはなくていいかなと思います。必要になった場合は呼び出し元のメソッド側でSystem.debugをいれて確認すれば問題ないかなと思いました。

気になっていること

System.deubugはステップ数を消費してしまいます。STARTとENDだけならせいぜい数十ステップ程度だと思うのでそれ程影響はないと思います。

もう一つ気になるのが処理時間の方です。System.debugがあることで処理にものすごい時間がかかるようになってしまうなら付けないほうがいいかなと思います。

ということでちょっと確認してみました。

値取得系のSystem.debug使用時の処理時間

f:id:tyoshikawa1106:20130622115208p:plain

文字列表示のみのSystem.debug使用時の処理時間

f:id:tyoshikawa1106:20130622115242p:plain

ステップ数を取得してDebug表示した場合は17ステップぐらいで0.001秒ぐらい消費しますが、特に処理のないDebugのみの場合は20ステップぐらいではほとんど時間がかかりませんでした。メソッドの最初と最後に表示させるぐらいならあまり影響はでないかなと思います。

新しい開発者コンソールのDebug Only機能でSystem.debugのみを表示できるようになったので必要な情報のみを確認できるようになりました。System.debugをうまく使えば知らない機能の調査でもどの順番でどのメソッドが呼ばれているかを確認しやすくなって調査が楽になると思います。