# OS_DumpCallTrace

## 構文

  `#include <nitro/os.h>`
  `void OS_DumpCallTrace( void );`

## 引数

なし。

## 返り値

なし。

## 説明

関数コールトレース情報を表示します。

この関数が呼ばれた時点のトレース情報を表示します。スレッドシステムを使用している場合はカレントスレッドの情報を表示します。特定のスレッドの情報を表示する場合は、`OS_DumpThreadCallTrace()` を使用してください。

以下、スタックモードの場合のトレース情報について説明します。

> (表示例)

> > `OS_DumpCallTrace: lr=0x02004438
> > test3: lr=0x0200447c, r0=0x000000cb
> > test2: lr=0x020044b0, r0=0x000000c9
> > test1: lr=0x0200426c, r0=0x000000c8`

> この表示からは、「現在 `OS_DumpCallTrace()` が呼ばれてトレース情報を表示していてその関数からの戻りアドレスは0x2004438である。その前に `test3()` が呼ばれていて戻りアドレスは0x200447cである。その前に `test2()` が呼ばれていて戻りアドレスは0x20044b0 である。その前に `test1()` が呼ばれていて戻りアドレスは 0x200426c である。」ということが解ります。( r0 の表示についてはオプション)

次にログモードについてのトレース情報について説明します。

> (表示例)

> > `OS_DumpCallTrace: lr=0x02004438
> > test3: lr=0x0200447c, r0=0x000000cb
> > test2: lr=0x020044b0, r0=0x000000c9
> > test1: lr=0x0200426c, r0=0x000000c8
> > test3: lr=0x0200447c, r0=0x000000cb
> > test2: lr=0x020044b0, r0=0x000000c9
> > test1: lr=0x0200426c, r0=0x000000c8`

> この表示からは、「現在 `OS_DumpCallTrace()` が呼ばれてトレース情報を表示していてその関数からの戻りアドレスは0x2004438である。」ということが解ります。さらに、この関数が呼ばれる以前に、profile機能がオンでコンパイルされた関数のうち、`test1`、`test2`、`test3`、`test1`、`test2`、`test3` をこの順に入ったことがわかります。ただしどの関数がどの関数を呼び出した、という情報はわかりません。

R0〜R3のレジスタ表示について：
これらの情報を関数コールトレースバッファに含めるかどうかはオプションです。レジスタを1つ含めた場合、バッファは１関数呼び出しにつき4バイト余計に消費されることになります。R0〜R3 の４レジスタを含めると１関数呼び出しにつき16バイト余計に消費されることになります。
表示しているR0は、関数が呼ばれた時の値で、C言語関数ならば、第一引数を表します。R1 は第二引数、R2は第三引数、R3は第四引数です。該当の引数を取らない関数については特に意味のない不定値となります。`OS_DumpCallTrace()` 、`OS_DumpThreadCallTrace()` 自体の呼び出しについては R0 以下の情報を表示しません。

この関数はデバッグ用の関数ですので、最終ROM版(FINALROM)ライブラリでは何も動作を行ないません。

###
表示モードについて

この関数のように、全ての情報を確実に表示することが速度よりも優先される場合は、一時的にでも表示をブロッキングモードに設定することをお奨めします。詳細は `OS_SetPrintBlockingMode()` を参照してください。

## 参照

`OS_InitCallTrace, OS_DumpThreadCallTrace
OS_SetPrintBlockingMode
`

## 履歴

2009/04/03 ブロッキングモードについて追加
2004/04/22 スタックモードとログモードの記述を追加
2004/04/13 初版