Skip to main content

IAR Embedded Workbench for Arm 9.70.x

ブレークポイントのヒント

このセクションの内容:

以下は、ブレークポイントの設定に関連して役に立つヒントです。

Bulb.png 不正な関数引数のトレース

ポインタ引数を持つ関数が時々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. */
    }

    また、条件が真のときに常に実行が中断するように、追加のダミー文にブレークポイントを設定する必要があります。利点は、実行速度がわずかにしか影響を受けないことですが、欠点はソースコードに小さいフットプリントが追加されることです。ただし、この方法ではブレークポイントを削除するだけで、実行の停止を除去することができます。

Bulb.png タスクを処理して実行を継続する

ブレークポイントがトリガされたらタスクを処理して、自動的に実行を継続できます。

[アクション]テキストボックスを使用すると、C-SPY マクロ関数などのアクションをブレークポイントに関連付けることができます。ブレークポイントがトリガされ、アプリケーションの実行が停止すると、マクロ関数が実行されます。この場合は、実行は自動的に継続されません。

代わりに、0(偽)を返す条件を設定できます。ブレークポイントがトリガされると、条件(タスクを実行する C-SPY マクロの呼び出しなど)が評価され、真ではないために実行が継続します。

C-SPY マクロ関数が単純なタスクを実行する例を考えます。

__var my_counter;

count()
{
  my_counter += 1;
  return 0;
}

この関数をブレークポイントの条件として使用するには、[条件][式]テキストボックスに「count()」と入力します。これにより、ブレークポイントがトリガされると、タスクが実行されます。マクロ関数 count は常に 0 を返すため、条件は偽であり、プログラムは停止することなく自動的に再開されます。