バグをどれだけ早く簡単に見つけられるか、デバッガの原点はそこにあります。
CSIDE Version7は、デバッガの原点に立ち返り、バグを早く簡単に見つけるための機能「バグ検出」を搭載しました。バグ検出機能を使うことで、通常のテストでは気付きにくいメモリ破壊が検出でき、バグの早期発見、対応が可能になります。
CSIDE Version7はデバッグ作業を早く楽に収束させるため、さまざまな機能で組込み開発者をサポートします。
void func1(void)
{
int i;
char buf[10];
for (i = 0; i <= 10; i++)
buf[i] = 0; // i==10でバッファオーバーフロー
}
void func2(void)
{
int i;
char buf[10];
int *p = (void*)buf;
for (i = 0; i < 10; i++ )
*p++ = 0; // intとcharの型違いポインタによりi==3でバッファオーバーフロー
}
void func3(void)
{
char buf[5];
strcpy(buf, "12345"); // '\0'のコピーでバッファオーバーフロー
memset(buf, 0, 10); // 6個目の要素でバッファオーバーフロー
}
void func4(void)
{
int i;
char *p = (char *)malloc(10);
for (i = 0; i <= 10; i++)
*p++ = 0; // i==10でバッファオーバーフロー
free(p); // mallocのポインタが変化したためfreeでエラー検出
}
バグ検出ビルドに対応しているIDEとコンパイラは以下のとおりです。
| IDE名 | コンパイラ名 | IDE提供会社 |
|---|---|---|
| CSIDE | shc/ccrx/gcc | コンピューテックス |
| HEW | shc | ルネサス エレクトロニクス |
| CS+ | ccrx | ルネサス エレクトロニクス |
| DS-5 | armcc | Arm |
| e2 studio | gcc | ルネサス エレクトロニクス |
| Xilinx SDK | gcc | Xilinx |
| Simplicity Studio | gcc | Silicon Labs |
| Code Composer Studio | gcc | Texas Instrurments |
CマクロはC言語ライクなマクロではなく、C言語の文法を完全に網羅したインタープリタです。そのため、CPUベンダが提供しているCソースの初期化ルーチンをそのまま実行することができ、導入時の手間を大幅にカットすることが可能です。また、マクロ・エディタを使えばソース・レベル・デバッグが可能ですので、プログラムのプロトタイプ開発にも利用可能です。
開発したCマクロのソース・ファイルは、変更することなくターゲット・システムに組込むことが可能です。
Version7以前から実装されている、便利な機能を紹介します。
アンドゥ・トレースは逆トレース/ステップ実行を仮想的に行う機能です。トレース/ステップ実行時にメモリやレジスタの値を記録しておき、その値を復元することで逆方向へのトレース/ステップ実行を実現します。変数の値も復元されますのでプログラムの追跡の繰り返しが激減します。
アンドゥ・トレースについての詳しい説明はこちらをご覧ください。
この機能はターゲットの状態を保存し、復元することができる機能です。メモリやレジスタの値をファイルに保存し、そのファイルを読み込むことで仮想的に状態を戻すことができます。
この機能は、ターゲット上で不具合が発生したときの状態を保存して、後で解析を行う場合に有効です。特に発生頻度の低い不具合の状態保存や、出先で発生した問題を持ち帰って解析する場合などに活用できます。