はじめに
e2studio V7.7.0 で追加されたスタック解析のヘッドレスアプリケーションを使用し、RXマイコンを対象に、コマンドラインからスタック情報の出力を試してみました1。その結果、スタック情報をCSVファイルとして取得できました
e2studio 7.7.0 Release Note より抜粋
使用環境
- e2studio V7.8.0
- Renesas CCRX v3.05.00
- Windows 11 Pro 22H2
e2studioのスタック解析について
e2studioには、各関数が使用するスタックサイズを表示する機能「スタック解析ビュー2」があります。表示形式は「ツリー構造」と「表形式」の2種類から選択できます
種類 表示 ツリー構造 表形式 注意: スタックサイズの合計は、メニューから「呼び出し先/元関数の合計を表示」を選択すると、各関数の横に
(8)
のように表示されます
事前準備
1.スタック使用量情報ファイルの出力設定
- ビルド時に、スタック使用量情報ファイル(.sni)を出力するよう設定します
プロジェクトのプロパティを開き、「C/C++ビルド>設定>ツール設定>Linker>その他」を選択し、「スタック使用量情報ファイルを出力する(-stack)」をチェックします
- ビルドして、スタック使用量情報ファイル(.sni)の出力を確認します
補足:ビルド結果(.abs)と同じフォルダに保存されます
2.Headless Buildの準備
以下の手順は「VS Codeで、RXマイコンの e2studio プロジェクトをビルドする 」と同様です
「e2studioのインストールフォルダ/eclipse/e2studio.ini」を同じフォルダにコピーし、「eclipse.ini」という名前に変更します
日本語の文字化けを防ぐため、eclipseの表示言語を英語に変更します
具体的には「elipcse.ini」の先頭に以下の2行を追加します-nl en_US
コマンドラインからスタック情報を出力する
コマンドプロンプトを開きます。スタック使用量情報ファイル(.sni)が保存されているフォルダに移動し、以下のコマンドを実行します
e2studioのインストールフォルダ\eclipse\eclipsec.exe -nosplash -application stackanalysis.application -calculateMaxStackSizeInclude=Callee -ccInput=スタック情報解析ファイル名(*.sni)
注意:"スタック使用量情報ファイル名"には実際のファイル名を指定してください
コマンドを実行すると、"スタック使用量情報ファイル名_StackAnalysis.csv"という名前のCSVファイルが出力されます
作業フォルダ>C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash -application stackanalysis.application -calculateMaxStackSizeInclude=Callee -ccInput=test.sni Analyzing... + Output: test_StackAnalysis.csv Analysis completed
CSVファイルの中身は、スタック解析ビューの
表形式
データになります
スタック解析のコマンドライン引数
stackanalysis.application
のコマンドライン引数の説明は下記の通りです
Usage: eclipsec.exe [-nosplash] -application stackanalysis.application [-ccInput=file1[,file2] [,file3] ...] [-userLB=file1[,file2] [,file3] ...] [-calculateMaxStackSizeInclude=[Callee|Caller]] -nosplash: Prevents the splash screen from being shown. -ccInput=file1[,file2] [,file3] ...: Input files of CCRX/CCRL project - SNI file absolute paths -userLB=file1[,file2] [,file3] ...: User library file - CSV files -calculateMaxStackSizeInclude=[Callee|Caller] If the option doesn't exist, don't calculate stack size in tree -calculateMaxStackSizeInclude=Callee: Calculate stack size including callees -calculateMaxStackSizeInclude=Caller: Calculate stack size including callers
主な引数は次の通りです
-ccInput
:スタック使用量情報ファイル(.sni)を指定します-calculateMaxStackSizeInclude
:スタックサイズの合計を出力するために必須の指定ですCaller
指定:呼び出し元関数との合計を表示
上位のノードより、下位の関数にスタックサイズを加算して表示しますCallee
指定:呼び出し先関数との合計を表示
末端のノードより、下位の関数中最大のスタックサイズを上位の関数に加算して表示します- オプションを指定しない:スタックサイズの合計を表示しません
Caller
指定Callee
指定オプションを指定しない _PowerON_Reset_PC ( 4 ) _PowerON_Reset_PC ( 452 ) _PowerON_Reset_PC __INITSCT ( 28 ) __INITSCT ( 24 ) __INITSCT __INIT_IOLIB ( 24 ) __INIT_IOLIB ( 120 ) __INIT_IOLIB _main ( 40 ) _main ( 448 ) _main _printf ( 60 ) _printf ( 412 ) __Printf
まとめ
e2studioで、コマンドラインからスタック情報をCSVファイルとして出力できることを確認しました。GUIでも同様の操作が可能ですが、スタック情報の解析を自動化したい場合には、活用できそうです