/Test_you

電子工作やプログラミングなど、やってみたことのメモ

e2studioでコマンドラインからスタック情報を出力してみた

はじめに

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のスタック解析について

  1. e2studioには、各関数が使用するスタックサイズを表示する機能「スタック解析ビュー2」があります。表示形式は「ツリー構造」と「表形式」の2種類から選択できます

    種類 表示
    ツリー構造
    表形式

    注意: スタックサイズの合計は、メニューから「呼び出し先/元関数の合計を表示」を選択すると、各関数の横に(8)のように表示されます

  2. コマンドラインから出力されるスタック情報は「表形式」のCSVファイルです

事前準備

1.スタック使用量情報ファイルの出力設定

  1. ビルド時に、スタック使用量情報ファイル(.sni)を出力するよう設定します
    プロジェクトのプロパティを開き、「C/C++ビルド>設定>ツール設定>Linker>その他」を選択し、「スタック使用量情報ファイルを出力する(-stack)」をチェックします
  2. ビルドして、スタック使用量情報ファイル(.sni)の出力を確認します
    補足:ビルド結果(.abs)と同じフォルダに保存されます

2.Headless Buildの準備

以下の手順は「VS Codeで、RXマイコンの e2studio プロジェクトをビルドする 」と同様です

  1. 「e2studioのインストールフォルダ/eclipse/e2studio.ini」を同じフォルダにコピーし、「eclipse.ini」という名前に変更します

  2. 日本語の文字化けを防ぐため、eclipseの表示言語を英語に変更します
    具体的には「elipcse.ini」の先頭に以下の2行を追加します

     -nl
     en_US
    

コマンドラインからスタック情報を出力する

  1. コマンドプロンプトを開きます。スタック使用量情報ファイル(.sni)が保存されているフォルダに移動し、以下のコマンドを実行します

     e2studioのインストールフォルダ\eclipse\eclipsec.exe -nosplash -application stackanalysis.application -calculateMaxStackSizeInclude=Callee -ccInput=スタック情報解析ファイル名(*.sni)
    

    注意:"スタック使用量情報ファイル名"には実際のファイル名を指定してください

  2. コマンドを実行すると、"スタック使用量情報ファイル名_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
    

  3. 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

主な引数は次の通りです

  1. -ccInput:スタック使用量情報ファイル(.sni)を指定します
  2. -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でも同様の操作が可能ですが、スタック情報の解析を自動化したい場合には、活用できそうです


  1. e2studio V7.7.0では、コマンドラインだけでなく、ビルド設定でもスタック情報を出力できるようになりましたが、スタックサイズの合計が出力されないため、利用しずらいです。これは、コマンドライン-calculateMaxStackSizeIncludeのオプションを指定しない場合と同じ挙動に見えます
  2. スタック解析ビューの詳細は、e2studioのヘルプで「e2studio ユーザーガイド>ビルドに関する機能>スタック解析>スタック解析ビューの使用方法」を参照してください