Skip to main content

IAR Embedded Workbench for Arm 9.70.x

スタック使用量の監視

このセクションの内容:

これらが[スタック]ウィンドウの 2 つの主な使用方法です。

  • スタックメモリ使用量の監視

  • スタックメモリコンテンツの監視

両方の場合とも、C-SPY はスタックを維持しているセクションのリンカ構成ファイルの定義から、定義されたスタックサイズとその割り当てに関する情報を取得します。何らかの理由で、システム起動コード (cstartup) によるスタック初期化を変更している場合は、その変更に応じて、リンカ設定ファイルのセクション定義も変更する必要があります。これを行わないと、[スタック]ウィンドウでスタック使用率を追跡できません。詳細については、『ILINK を使用したリンク』を参照してください。

スタックメモリ使用量をモニタするには
  1. C-SPYを起動する前に、[ツール]>[オプション]を選びます。[スタック]ページで、

    • グラフィカルスタック表示とスタック使用トラッキングを有効にするを選びます。このオプションは、スタックしきい値の超過時にワーニングオプションも有効にします。適したしきい値を指定します。

    • スタックポインタが境界外の時にワーニングオプションにも気を付けてください。このような警告は[デバッグログ]ウィンドウに表示されます。

    EnablingGraphicalStackBar_1.png
  2. C-SPYを起動します。

    アプリケーションを最初にロードするときや、リセットごとに、スタックエリアのメモリに 0xCD というバイト値が設定され、その後でアプリケーションの実行が開始されます。

  3. [表示]>[スタック]>[スタック1]を選んで、[スタック]ウィンドウを開きます。

    最大 2 つの[スタック] ウィンドウを開くことができ、それぞれに異なるスタックを表示する(スタックが複数ある場合)か、同じスタックを異なる表示設定値で表示することができます。

  4. アプリケーションの実行を開始します。

    実行が停止すると、スタックの最後から、値が 0xCD でないバイトの位置(スタック中で使用された最も上の位置)までの範囲のスタックメモリが検索されます。スタックバーのうすいグレーの部分は未使用のスタックメモリエリアを示し、濃いグレーの部分は使用済みのスタックメモリを示します。

    たとえば、予約されたメモリアドレス範囲の 44% だけが表示されます。これはメモリのサイズを減らすことを考えないといけないことの意味します。

    MonitoringStackSizeUsage_Mym80_02.png

    注記

    これはスタック使用率のトレース方法としては信頼性の高い方法ですが、スタックオーバフローが検出されるという保証はありません。たとえば、スタックが範囲を超えて誤って拡張され、スタック上限近辺のバイトは変更されることなく、スタックエリアの最後のメモリが変更される可能性があります。同様に、アプリケーションがスタックエリア内のメモリを誤って修正する可能性もあります。

スタックメモリコンテンツをモニタするには
  1. スタックメモリをモニタし始める前に、デバッグ中パフォーマンスを向上するために、オプショングラフィカルスタック表示とスタック使用トラッキングを有効にするを無効にします。

  2. C-SPYを起動します。

  3. [表示]>[スタック]>[スタック1]を選んで、[スタック]ウィンドウを開きます。

    ディスプレイフォーマットを変更したりできるディスプレイエリアの様々なコンテンツメニューにアクセスできます。

  4. アプリケーションの実行を開始します。

    実行を停止すると、関数パラメータがスタックを通過いるかなどスタックメモリをモニタできます。

    MonitoringStackMemory_Mym80_02.png