ブレークポイントのヒント
以下は、ブレークポイントの設定に関連して役に立つヒントです。
不正な関数引数のトレース
ポインタ引数を持つ関数が時々NULL引数によって誤って呼び出される場合、その動作をデバッグした方がよいときがあります。以下の方法が役に立ちます。
関数の最初の行にブレークポイントを設定して、パラメータが
0のときにだけ条件が真となるようにします。このブレークポイントは、問題となる状況が実際に発生するまでトリガされません。この方法の利点は、余分なソースコードが必要ないことです。欠点は、実行速度が極端に低下する可能性があることです。問題のある関数で
assertマクロを使用できます。たとえば、次のようになります。int MyFunction(int * MyPtr) { assert(MyPtr != 0); /* Assert macro added to your source code. */ /* Here comes the rest of your function. */ }条件が真のときは必ず実行が中断します。利点は、実行速度がわずかにしか影響を受けないことですが、欠点はソースコードに小さいフットプリントが追加されることです。また、実行の停止を除去する唯一の方法は、マクロを削除してソースコードをリビルドすることです。
assertマクロを使用する代わりに、次のように関数を修正できます。int MyFunction(int * MyPtr) { if(MyPtr == 0) MyDummyStatement; /* Dummy statement where you set a breakpoint. */ /* Here comes the rest of your function. */ }また、条件が真のときに常に実行が中断するように、追加のダミー文にブレークポイントを設定する必要があります。利点は、実行速度がわずかにしか影響を受けないことですが、欠点はソースコードに小さいフットプリントが追加されることです。ただし、この方法ではブレークポイントを削除するだけで、実行の停止を除去することができます。
タスクを処理して実行を継続する
ブレークポイントがトリガされたらタスクを処理して、自動的に実行を継続できます。
[アクション]テキストボックスを使用すると、C-SPY マクロ関数などのアクションをブレークポイントに関連付けることができます。ブレークポイントがトリガされ、アプリケーションの実行が停止すると、マクロ関数が実行されます。この場合は、実行は自動的に継続されません。
代わりに、0(偽)を返す条件を設定できます。ブレークポイントがトリガされると、条件(タスクを実行する C-SPY マクロの呼び出しなど)が評価され、真ではないために実行が継続します。
C-SPY マクロ関数が単純なタスクを実行する例を考えます。
__var my_counter;
count()
{
my_counter += 1;
return 0;
}この関数をブレークポイントの条件として使用するには、[条件]の[式]テキストボックスに「count()」と入力します。これにより、ブレークポイントがトリガされると、タスクが実行されます。マクロ関数 count は常に 0 を返すため、条件は偽であり、プログラムは停止することなく自動的に再開されます。