関数トレース
Note
SOLID-1.4.0 以降で使用できます。スターターキットでは使用できません。
概要
引数付きの関数トレース情報をターゲットのメモリに保存し、結果をIDEで表示します。 clangでのみ使用できます。(gccを選択している場合はオプションが表示されません。)
準備
プロパティシート変更
プロパティシートのユーザマクロに、LibXRayTrace を追加し、値を true にしてください。
メモリ領域の割り当て
メモリマップデザイナで、FTRACE という名前のメモリ領域を割り当ててください。 サイズは、最低でも 8Kバイト * コア数分 程度必要です。この設定が無い場合には、malloc()でヒープからメモリを確保してしまうので、 メモリマップデザイナでの割当を推奨します。
インストルメンテーションの有効化
トレースを有効にしたいプロジェクトのプロパティを開き、 [C/C++]-[XRay] で XRayインストルメンテーションの有効化 を はい にしてください。
命令のしきい値を指定すると、指定された命令数以上に展開される関数にのみ適用されます。 指定しない場合は 200命令 となります。1を指定すると、すべての関数に適用されますが、 小さくて頻繁に実行される関数にコードが追加されると、 著しくパフォーマンスが低下する可能性がありますので注意してください。
関数へのパッチ適用
コンパイル、実行後に適当な場所でブレークし、メニューの [デバッグ] - [ウィンドウ] - [関数トレース] から関数トレースウィンドウを開きます。次に ウィンドウの右側にある Patch all をクリックし、 関数にパッチを当てます。
実行と結果表示
再実行すると、トレースデータの収集が開始されます。 ブレーク後に、関数トレースウィンドウにある Save trace data をクリックしてください。
データの欄に取得した日付が表示されるので、▷ をクリックして展開し、CPU番号をダブルクリックしてください。
結果が表示されます。
ウィンドウ上段には、タスクの遷移が時間とともに表示されます。 下段には、関数名が呼び出された順に表示されます。表示される項目は以下のとおりです。
項目 |
説明 |
---|---|
タイプ |
関数が呼び出された(entry)、関数からリターンした(exit)のどちらか。 |
名前 |
関数名。 |
深さ |
関数の呼び出し階層の深さ。 |
間隔 |
関数が呼び出されてから、リターンするまでの時間。
entryで間隔が表示されている場合は、それ以上呼び出される関数がないleaf関数です。
間隔が表示されていない場合、さらに呼び出される関数が存在します。
|
時間 |
ターゲットのタイマから取得した時間。 |
タスク |
タスクID。 |
引数 |
関数に引数がある場合、その値が4つまで表示されます。それ以上の引数は???表示になります。 |
その他の使い方
特定の関数にパッチを当てる
関数トレースウィンドウにある、Patch をクリックすると、 パッチを当てる関数を選択するウィンドウが表示されます。 検索などで関数を絞り込み、選択してOKを押すとパッチが適用されます。
これで選択した関数のトレースのみが取得できるようになります。
パッチの無効化
関数トレースウィンドウから Unpatch を実行すると、パッチ非適用状態に戻るので、 トレースを収集する、ランタイムコードが実行されずパフォーマンス低下が最小限になります。
制限事項
トレースを取得できるタスクは現状63までです。
関数の呼び出しの深さは64までです。
clangの機能を使用しているため、gccでは使用できません。