動的テストツール CodeRecorder CR-200 デバッガとは異なる視点でバグを発見する動的テストツール!

デバッガとは異なる視点でバグを発見する動的テストツール(動的解析ツール)!
今、動いているプログラムは「偶然」動いているように見えるだけかもしれません。プログラムの本当の動きは人間のイメージを越えていることがあり、デバッガを使用していても気づかないことがあります。CodeRecorderはプログラムの本当の動きを見える化することで、デバッガでは手に負えないような難しいバグを発見することができます。
ターゲットCPUに依存することなく、様々なシステムでお使いいただけるのも特長の一つです。※1

製品リリース間近になって、マレにしか発生しない不具合に遭遇し、原因を特定するのに試行錯誤しながら時間だけが大幅に過ぎていくような経験ありませんか?
CodeRecorderを使えば、再現性の難しいバグも簡単に発見でき、より品質の高い製品開発が行えます。

CodeRecorderとは

CodeRecorderは、ターゲット・プログラムの実行を記録、解析して、

  1. プログラムの見える化(デバッグ)
  2. カバレッジ・テスト(品質アップ)
  3. 実行時間計測(パフォーマンスアップ)

などの機能が一台でできる新しい形のツールです。

CodeRecorderとは

CodeRecorderの特長

  • ターゲットCPUに依存しない汎用性の高いツール ※1
  • 数時間におよぶターゲット・プログラムの実行を記録可能
  • 関数の実行を時系列でグラフ表示し、見える化を実現
  • カバレッジ機能でテスト漏れを確認可能
  • 関数プロファイラによりプログラムのボトルネックを発見
  • 変数値の変化をグラフ表示し、突出したデータを見える化
  • 既存ターゲットでもGPIO2本で簡単に接続可能
  • 簡易ロジアナ機能で信号波形とプログラムの同期デバッグが可能
  • Webカメラで動画を記録しプログラムの実行履歴と同期可能
  • 起動オプションで取得等の操作が可能(外部ツールとの連携)

プログラムの見える化からソース・デバッグまで!

関数の見える化でバグを見つける

関数の呼び出しを時系列でグラフ表示します。関数の呼び出し状態と実行時間が一目でわかり、意図しない呼び出しや、実行時間の長い関数を簡単に見つけることができます。 OSに手を加えずにRTOSやLinuxにも対応、システムコールの呼び出し、タスクやスレッドがどのタイミングで実行されているか把握できます。 グラフの拡大縮小が簡単にできるため、記録データ全体を確認することも容易です。また、関数の検索やマークを設定、2点間時間計測など、バグの発見に役立つ機能がそろっています。

> プログラムの見える化でバグを発見ストーリー <

関数の見える化でバグを見つける

動的メモリの見える化でバグを見つける

動的メモリの使用状況を監視しグラフ表示します。メモリの確保や解放が一目でわかるので、異常なメモリ確保を見つけることが容易になります。また、メモリ・リークや多重解放などの異常ポイントを検出し、そのポイントからソース・デバッグを行うことも可能です。

動的メモリの見える化でバグを見つける

変数の見える化でバグを見つける

変数の値の変化をグラフ表示します。変数値を見える化することで、バグの原因となりそうな突出した値を確認することができます。値の検索も簡単に行えますので、値が変更されたポイントを表示し、そのポイントからソース・デバッグを行うことも可能です。

変数の見える化でバグを見つける

見える化ウィンドウから再現デバッグ

見える化のウィンドウで異常個所を見つけた場合、「ここからデバッグ」メニューによってソース・デバッグを行うことが可能です。実行記録のデータで、ステップ実行や逆方向への追跡が可能です。また、変数を記録しておけば変数値を再現しながらデバッグすることもできます。CodeRecorderは見える化だけにとどまらず、ソース・コード・レベルのデバッグまでサポートしています。

見える化ウィンドウから再現デバッグ

カバレッジでテスト漏れを防ぐ!

コードの通過率でテストの進捗を把握する

テストによってソース・コードの何パーセントが通過したかを表示、テストの進捗状況を把握することができます。まだ通過していないコードを見つけ、そのテスト項目を追加することで、品質向上に役立てることができます。カバレッジ率を表示するカバレッジ・ウィンドウはソース単位や関数単位でのC0/C1カバレッジを確認できます。

コードの通過率でテストの進捗を把握する

未通過のソース行を確認可能

カバレッジ・ウィンドウでカバレッジ率が低い関数を見つけた場合、その関数のどこが未通過か、ソース表示で確認できます。グレーで表示されているソース行の条件を確認し、通過させる条件をテスト項目を追加していけば、より強力なテストとなり、品質アップへつながります。

未通過のソース行を確認可能

リアルなプログラム通過を確認

実機の動作中にプログラムの通過を確認できる、カバレッジ・モードを用意。ソース表示で通過した行は赤色にマークされますので、現在のテストでは未通過の場合、条件を変えてテストを行うことができます。カバレジ・ウィンドウのC0/C1カバレッジ率もリアルタイムに変化を確認できます。このモードではデータが膨大にならないため、長時間のテストも安心して行えます。

リアルなプログラム通過を確認

運用面での機能も充実

カバレッジはチームで行いますので、運用していくことが重要になります。報告書作成やCSV出力はもちろん、チームでカバレッジを行うためのマージ機能、除外機能など実作業に必要な機能を用意しています。

運用面での機能も充実

パフォーマンス解析で速度を上げる!

関数の実行時間計測でボトルネックを発見

関数ごとの実行時間や呼び出し回数、最大、最小、平均の実行時間を計測し表示します。呼び出している子関数の割り合いを円グラフで表示することや、関数のコールグラフから、ボトルネック関数を見つけることも可能です。また、最大時間、最小時間を記録したポイントをグラフ系のウィンドウに表示させることができ、そのポイントからソースを追跡することも可能です。

関数の実行時間計測でボトルネックを発見

改善前と改善後の実行時間を比較

実際にどの関数が何%改善されたかが一目で分かります。改善を行ったつもりで逆に改悪してしまった関数もレポートされますので、プログラム全体でのパフォーマンスアップ状況を把握できます。

改善前と改善後の実行時間を比較

任意の2点間を計測

任意の2点間の実行時間を計測し、時間の分布を詳細に表示可能です。特定のルーチンの時間のばらつきを見ることで、実行時間に問題がないか確認できます。

任意の2点間を計測

その他の特長

テスト・コードの自動埋め込み

計測用のテスト・コードはソース・ファイルを解析して自動的に埋め込みます。テスト・コードを埋め込んで影響が出る場合は、関数単位で外すことができます。(Cコンパイラ:C89/C99/C++11に対応)

テスト・コードの自動埋め込み

ターゲット接続が簡単

接続は高速データ通信のメモリ・バスと、最少2ピンで接続できるGPIOを選択可能です。GPIOのデータは1/2/4本から選択します。

ターゲット接続が簡単

接続信号の波形表示

接続時にオシロスコープを使用することなく信号の様子を確認できます。GPIOの設定等で信号が正しく出ていない場合にすぐに確認できます。

※この機能はCR-200への接続信号のみで、汎用的な信号を測定するものではありません。

接続信号の波形表示

CodeRecorder V5の新機能

Webカメラ動画撮影機能

パソコンに接続されたWebカメラを使用して、レコード・パケットの記録と同時に動画撮影が可能になりました。
この機能により、動きのあるターゲット・システムの動画とプログラムを同期して確認することができます。例えば表示系やロボットなどの動きをカメラで撮影しておけば、バグが発生したポイントを動画で確認し、そのポイントを関数レベルで追跡することが可能になります。

関数スタック、関数遷移、プロセス遷移のウィンドウには、動画のサムネイルが表示されます。コマ撮り画像と関数の変化を同じウィンドウで確認することができます。

Webカメラ動画撮影機能

また、取り込んだ動画は専用の再生ウインドウで確認することもできます。画像の比較や差分検出も可能ですので、変化が発生したポイントを簡単に検索することができます。

再生ウインドウ

RAMモード

ターゲットのRAMを使用してレコード・パケットを取得できるモードを追加しました。
RAMがあればGPIOなどのハードウェア・リソースを必要としないため、簡単にデータが取得できます。

起動オプションの追加

CodeRecoreder E2をコマンドで起動する場合の起動オプションを追加しました。
テスト・コードの埋め込みや、レコード・パケットの取得、レポート出力などの一連の操作がコマンド・ラインで行うことができます。
レポート出力は全てCSV形式となっていますので、過去のレポートとの比較が簡単にできます。
これを利用すれば外部ツールでの、テストの自動化などに応用できます。

カバレッジ・モードの継続取得

カバレッジ・モードの取得開始時はカバレッジの表示を初期化していましたが、初期化しない設定を追加しました。
カバレッジ・モードの前の表示から継続した取得が可能になりますので、テストしたコードを重複せずにテストを進めることができます。

CodeRecorder V4で追加された機能

簡易ロジアナ機能

最大サンプリング周波数100MHzの簡易ロジック・アナライザ機能を追加しました。
GPIOプローブを使用して最大4チャンネルのデジタル信号波形が表示可能です。
リアルタイムに波形表示が可能なため、ターゲットを操作しながら信号の確認が可能になります。
また、取り込みを停止した後は、プログラムと同期しながら波形を追跡できるので、ソフトとハードの関連性をデバッグすることが容易になります。

 

その他の機能

  • マーク間の時間計測
  • パターン検索
  • 特定信号のH/Lで取得
  • 特定関数を実行してる間だけ取得
簡易ロジアナ機能

テスト・コードのオーバーヘッド短縮モード

高速/中速のテスト・コードを自動的に使用して、全体的なテスト・コードのオーバヘッドを短縮できるモードを追加しました。
このモードを使用することでオーバヘッドが最大で従来の半分ぐらいに短縮されます。
オーバーヘッドの影響で動作が不安定になっていたプログラムも、このモードを使用することで動作する可能性が高くなります。

テスト・コードのオーバーヘッド短縮モード

変数チャートの拡張

変数チャートでfloat/double型変数の表示に対応しました。
float/double型の変数を登録すると右側のスケールが浮動小数点の表示に切り替わります。
また、グラフの表示色とマーカの形状を変更可能にしました。

変数チャートの拡張

プロファイラの詳細表示のCSV保存機能

プロファイラ(実行時間/周期時間)の詳細表示をCSV形式のファイルに保存できるようにしました。
詳細表示の高速化も対応しています。

プロファイラ(実行時間)に比率表示を追加

プロファイラ(実行時間)ウィンドウに実行時間(self)の比率の表示を追加しました。
これにより関数単体の実行時間の相対的な実行比率が分かるようになります。

プロファイラ(実行時間)に比率表示を追加

レコード・パケット出力時間補正機能

レコード・パケットの出力時間を取り除いて、実行時間を補正するモードを追加しました。
よりリアルな実行時間を計測したい場合はこのモードを使用してください。

レコード・パケット出力フォルダ指定

レコード・パケットの出力フォルダが設定可能になりました。
従来はプロジェクト・ファイルのフォルダに固定されていましたが、この設定を行うことで任意のフォルダに出力することができます。
プロジェクト・ファイルのディスク容量が足りない場合、この設定を行うことで回避できます。

報告書の作成フォルダ

報告書の作成フォルダはデフォルトでプロジェクト・ファイルのフォルダのReportsに作成されましたが、これに日時のフォルダを追加して、報告書が上書きされないように対応しました。

その他の拡張機能

  • コンパイル・ログからファイルを追加機能の変更
  • 接続信号チェックのデータ取得ディレイの自動調整
  • GPIOのデータ・ピン数指定のUI化
  • プロファイラの比較機能の変更
  • GPIO同一ポート分割出力指定

CodeRecorder V3で追加された機能

高速/中速テスト・コード

高速テスト・コードと中速テスト・コードは、従来のテスト・コードの転送速度に対して中速テスト・コードで1.5~2倍、高速テスト・コードにおいては実に2~3倍の速度で転送することが可能となりました。テスト・コードの転送時間時間が少なくなったことにより、実実行時間により近い測定が可能になりました。また、今までテスト・コードの転送速度がネックとなり埋め込むことができなかったクリティカルな処理関数も、テスト対象にできる可能性が広がりました。

高速/中速テスト・コード

テスト・コードの負荷ランキング表示

高速/中速テスト・コードを有効に利用するために、[埋め込み負荷ランキング]を表示する機能を追加しました。この機能は取得したレコード・パケットから負荷の高いテスト・コードを抽出し、高速/中速へ設定を変更することができる機能です。オーバーヘッドの高いテスト・コードを試行錯誤で除外しなくても、実測値をもとにランキング表示されたものを見ながら負荷の高い埋め込みコードを高速/中速テスト・コードに置き換えることが可能となります。

テスト・コードの負荷ランキング表示

周期タイムアウト検出

周期タイムアウト検出は、特定のポイントが周期的に呼び出される場合、その周期が設定時間を超えたことを検出する機能です。通常のテスト・コードよりも高精度な10ns単位での計測が可能で、タイムアウトした場合に取り込みを停止させることや、マークを設定することができます。これにより、設定時間を超えた場合のプログラムの動作を素早く検証することが可能となります。

周期タイムアウト検出

2点間タイムアウト検出

2点間タイムアウト検出は、2点間の実行時間が設定時間を超えたことを検出する機能です。通常のテスト・コードよりも高精度な10ns単位での計測が可能で、タイムアウトした場合に取り込みを停止させることや、マークを設定することができます。これにより、設定時間を超えた場合のプログラムの動作を素早く検証することが可能となります。

2点間タイムアウト検出

変数監視機能

変数監視機能は、特定の変数の値を監視し、条件一致を検出する機能です。条件の指定には値の一致、不一致、範囲内、範囲外の設定が可能で、最大4つまで条件を設定することができます。条件が一致したときに取り込みを停止させることや、マークを設定することができます。レコード・パケットの取得ダイアログで設定変数の値をサンプリング表示することも可能です。

変数監視機能

外部信号入力機能

接続してるデータの本数が 1ビットまたは2ビットの場合、未使用のPD3信号線を外部入力信号として使用できます。立ち上がり、立ち下がりの条件設定が可能で、条件一致で取り込みを停止させることや、マークを設定することができます。また、EXTCNコネクタにエクスターナル・プローブを接続することでBRKINを外部入力信号として使用できます。パルスを入力することで取り込みを停止させることや、マークを設定することができます。これらの入力信号はレコード・パケットの取得タイミングとは関係なく非同期に入力されますので、正確な入力時間が得られます。

PALMiCEの制御機能

当社製JTAGエミュレータPALMiCEとEXTCNコネクタに専用ケーブルで相互に接続して、タイムアウトや変数監視の条件一致でPALMiCE側を停止させることが可能です。

*この機能は、PALMiCE3 ARM および PALMiCE4 のみ使用可能です。

各種モニタ機能

レコード・パケットの取得ダイアログにデータの取り込みに関する、さまざまな情報を表示する機能です。レコード・パケットの詳細な取得状況や、タイムアウト機能、監視機能のステータスが表示されます。

各種モニタ機能

遷移系ウィンドウにマーク表示

関数スタックや関数遷移などのウィンドウにタイムアウト監視や変数監視、外部信号入力などのマークが表示されるようになります。右クリックメニューで「トリガ」を選択すると表示できるマークを選択することができます。

遷移系ウィンドウにマーク表示

変数チャートのCSV保存機能

変数チャートに変数値をCSV形式で保存します。保存したファイルを表計算ソフトなどでグラフ化することができます。

[コンパイル・ログからファイルを追加]機能にコンパイラ追加

プロジェクト・ウィンドウの[コンパイル・ログからファイルを追加]の機能で、「EW RL78」、「CS+ RL C」、「LAPIS CCU8 C」に対応しました。

信号波形表示の機能追加

信号波形表示に、ズームアウトして全体を表示する[全表示]と、連続して波形を取得する[連続表示]の機能を追加しました。

CodeRecorderの使い方

CR-200接続図
ターゲット・システムにGPIOまたはメモリ・バスI/Fで専用ハードウェア「CR-200」を接続し、テスト・コードから出力された情報を記録します。テスト・コードはCodeRecorderが必要な場所に自動的に埋め込むため、手作業でソース・コードを変更する必要はありません。
CodeRecorderの使い方

使用事例

事例1:チェックリスト、残念ながらカバレッジ率60%でした。

CodeRecorderのカバレッジ機能を使ってテストしてみたところ、既定のチェックリストをすべてクリアしたにもかかわらず、C0カバレッジ率が60%しか達成していなくて驚きました。通過していないコードはデバッグ用のコードや、めったに起こらないエラーチェックルーチンなどでしたが、中には if 文の条件式が間違っていたために実行されない本当のバグも見つかりました。

事例2:カバレッジなんか大して品質は上がらないと思っていました。

今までは、カバレッジなんて面倒な作業で、やらなくても品質は確保できていると考えていましたが、CodeRecorderのカバレッジを使ってみると、ソースコードの通過しない場所が分かるので、新たなテストケースの追加に役立ちました。ほかにも、使われていない関数がソース上に残っているのが発見でき、ソースコードの整理にも有効であることが分かりました。

事例3:何日も悩んだバグが数十分で解決できて驚きです。

新しく開発した製品にTCP/IPで通信を行う機能を追加したのですが、思ったよりもパフォーマンスが出ませんでした。最初はLANコントローラ系の設定ミスだろうと思っていましたが、特に間違いはなく、デバッガで追いかけても原因が特定できずに、行き詰っていました。ダメもとでCodeRecorderを使ってみると、関数の動きが視覚化されて、そこに周期割り込みが想定以上に発生していることが分りました。何日も費やした問題が、ほんの数十分で解決して感動しました。

動作確認済みボード

ボード名 メーカ名
CPU名
確認済み
接続方法
ボード・メーカ名
ZedBoard-7000 Xilinx
Zynq-7000 SoC
GPIO AVNET
CY8CKIT-149 PSoC 4100S
Plus Prototyping Kit
Cypress
PSoC 4100S
GPIO Cypress Semiconductor
F2MC-16FX(MB96F615) Cypress
F2MC-16FX
GPIO Cypress Semiconductor
SAMV71 Xplained Ultra Microchip Technology
SAMV71Q21
GPIO Microchip Technology
EVK-MIMX8MP NXP Semiconductors
i.MX 8M Plus
GPIO NXP Semiconductors
8MNANOD4-EVK NXP Semiconductors
i.MX 8M Nano
GPIO NXP Semiconductors
8MMINILPD4-EVK NXP Semiconductors
i.MX 8M Mini
GPIO NXP Semiconductors
MCIMX8M-EVKB NXP Semiconductors
i.MX 8M Quard
GPIO NXP Semiconductors
MCIMX6UL-EVK NXP Semiconductors
i.MX 6UltraLite
GPIO NXP Semiconductors
i.MX RT1064 Evaluation Kit NXP Semiconductors
i.MX RT1064
GPIO NXP Semiconductors
QorIQ LS1046A Reference Degisn Board (LS1046ARDB) NXP Semiconductors
LS1046A
GPIO NXP Semiconductors
FRWY-LS1046A DEVELOPMENT PLATFORM NXP Semiconductors
LS1046A
GPIO NXP Semiconductors
Blue Gecko Module Wireless Starter Kit Silicon Laboratories
BGM111
GPIO Silicon Laboratories
EFM32GG11 Giant Gecko Starter Kit Silicon Laboratories
EFM32GG11
GPIO Silicon Laboratories
STM320518-EVAL STMicroelectronics
STM320518
GPIO STMicroelectronics
STM32MP15X-EVAL STMicroelectronics
STM32MP157C
GPIO STMicroelectronics
TMDS64GPEVM
AM64x General Purpose Evaluation Module (GP EVM)
Texas Instruments
AM6442
GPIO Texas Instruments
TMDX654GPEVM
AM65x evaluation module (EVM)
Texas Instruments
AM6548
GPIO Texas Instruments
AM574X Industrial Development Kit Texas Instruments
AM5748
GPIO Texas Instruments
66AK2Gx (K2G) Evaluation Module Texas Instruments
66AK2G02
GPIO Texas Instruments
AM1808 EVM Texas Instruments
AM1808
メモリバス Texas Instruments
Armadillo-500 NXP Semiconductors
i.MX31
GPIO アットマークテクノ
Armadillo-800 ルネサス エレクトロニクス
R-Mobile A1
GPIO アットマークテクノ
Armadillo-840/A ルネサス エレクトロニクス
R-Mobile A1
GPIO アットマークテクノ
CKB-1808 Texas Instruments
AM1808
メモリバス
GPIO
コンピューテックス
CKB-3352 Texas Instruments
AM3352
メモリバス
GPIO
コンピューテックス
CKB-RZ/A1H ルネサス エレクトロニクス
RZ/A1H
GPIO コンピューテックス
CEV-RZ/A1L ルネサス エレクトロニクス
RZ/A1L
メモリバス コンピューテックス
RX62N8 評価ボード ルネサス エレクトロニクス
RX62N
GPIO コンピューテックス
SH7216F 評価ボード ルネサス エレクトロニクス
SH7216F
メモリバス
GPIO
コンピューテックス
ML62Q1267 Reference Board ラピステクノロジー
ML62Q1267A
GPIO ラピステクノロジー
EVALUATION KIT EK-RA6M3 ルネサス エレクトロニクス
RA63M
GPIO ルネサス エレクトロニクス
Renesas Starter Kit+ for RX65N-2MB ルネサス エレクトロニクス
RX65N
GPIO ルネサス エレクトロニクス
Renesas Starter Kit for RL78/G13 ルネサス エレクトロニクス
RL78/G13
GPIO ルネサス エレクトロニクス
RSK RZ/N1D CPU Board +
RSK RZ/N1 Expansion BOARD
ルネサス エレクトロニクス
RZ/N1D
GPIO ルネサス エレクトロニクス

動画説明

CodeRecorderのセットアップ方法

カバレッジでテスト漏れを防ぐ!

パフォーマンス解析でスピード・アップ!

プログラムの見える化からソース・デバッグまで

YouTube COMPUTEX Channelへその他の動画は、YouTubeの「COMPUTEX Channel」でご覧いただけます。

関連資料

関連記事

資料一覧

対応パソコン

対応OS : 日本語 Windows 11/10/8 (64bit /32bit)
HDD : データ取得用に数十GB以上の空きが必要
USB : USB3.0

CodeRecorderの機能を体験できる!

CodeRecorderを無償評価貸出中!


CodeRecorder CR-200 標準セットを無償でお貸出しします。

お問い合わせ回数無制限のサポート付き、機能制限版ではない「製品版」をお使いいただけます。
この機会にCodeRecorderを使ってみませんか。

 

GPIO 2本だけでつながる!
既存のシステムでも、使っていないGPIOが2本あれば、簡単に接続して評価できます。

 

  • お客さまの実際のシステムに接続して評価できます!
    今抱えている問題で使ってみませんか?
  • 接続が簡単なんです!
    使っていないGPIOが2本あれば、簡単に接続して評価できます。
  • 評価ドライバ作成サービスが付いています!
    お客さまが実際に評価される環境のドライバをご提供します。

チームで解析 - CodeRecorder E2 Soft

「CodeRecorder E2 Soft」は、CR-200を使って取得したデータをCR-200専用ソフトとは異なる環境で、解析表示するためのデータ・ビューワー専用ソフト(別売)です。
異なる開発拠点や部内・チーム内で解析結果をシェアする場合に
ご活用いただけます。

例えば、生産工場の品質管理部隊が、CR-200を使い品質テストを
行った際、不具合が発生したとします。
CodeRecorder E2 Softを使えば、その取得データを各地の開発部隊に送り、CR-200本体やターゲットが手元に無い環境でも、取得データから不具合のデバッグを行うことが可能となります。
CodeRecorder E2 Soft
  • ※1:現在、動作を確認しているCPUとコンパイラは下記のとおりです。
    下記以外をお使いの場合は、ドライバをお客様でカスタマイズしていただく必要があります。
    【CPU・コア】
     arm:Arm7/9/11,Cortex-A/R/M
     ルネサス:SH,H8,RX,RL,RZ,M16C
     TI:MSP430,C2000
     Cypress:F2MC
     ラピステクノロジー:ML62Q1267A
    【コンパイラ】
     GNU C
     DS-5,MDK
     EW ARM
     SHC,H8C,RXC,RLC
     CCS
     Softune