バグを早く簡単に見つけられる「バグ検出」搭載 CSIDE Version7 バグ検出機能を使うことで、今まで気づかなかった配列やヒープ・エリアの破壊が検出でき、バグの早期発見、駆除が可能になります。

バグをどれだけ早く簡単に見つけられるか、デバッガの原点はそこにあります。
CSIDE Version7は、デバッガの原点に立ち返り、バグを早く簡単に見つけるための機能「バグ検出」を搭載しました。バグ検出機能を使うことで、通常のテストでは気付きにくいメモリ破壊が検出でき、バグの早期発見、対応が可能になります。
CSIDE Version7はデバッグ作業を早く楽に収束させるため、さまざまな機能で組込み開発者をサポートします。

隠れたバグを見つけ出す「バグ検出機能」

バグ検出機能はターゲット・プログラムの実行時に、配列やヒープ・エリアが破壊されるのを検出するための機能です。配列やヒープ・エリアへオーバー・フローまたはアンダー・フローの書き込みが発生した場合に、プログラムをブレークさせます。

バグ検出の特長

  • 実行時に配列やヒープ・エリアの破壊等のバグを検出しブレーク
  • CSIDEでバグ検出対象ソースを選択し、ビルドするだけで利用可能
  • バグを検出したソース行を表示してブレーク
  • 検出時のローカル変数、スタックトレースも表示
  • ターゲットCPUに非依存
バグ検出の特長

検出できるバグについて

  • 配列・ポインタへの書き込み時のオーバーフロー、アンダーフロー検出
  • strcpy/strcat/memcpyなどのライブラリ関数でのオーバーフロー検出
  • mallocで確保したヒープ・エリア書き込み時のオーバーフロー、アンダーフロー検出
  • 不正なfreeの検出
バグ検出

バグ検出の例

    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でエラー検出
    }				

使い方は簡単

▼ Step1

CSIDEで対象となるオブジェクト・ファイルをダウンロードし、バグ検出の設定を行います。

Step1

▼ Step2

IDEを起動し、再ビルドを行います。自動的にバグ検出用コードが埋め込まれます。

Step2

▼ Step3

ビルドが完了すれば、CSIDEでオブジェクト・ファイルをダウンロードし[バグ検出実行]します。
バグが発見されれば該当行でブレークします。

Step3

バグ検出に対応しているIDEとコンパイラ

バグ検出ビルドに対応している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
※Windows版のIDEおよびコンパイラが対象です。

C言語と完全互換「Cマクロ」

CマクロはC言語ライクなマクロではなく、C言語の文法を完全に網羅したインタープリタです。そのため、CPUベンダが提供しているCソースの初期化ルーチンをそのまま実行することができ、導入時の手間を大幅にカットすることが可能です。また、マクロ・エディタを使えばソース・レベル・デバッグが可能ですので、プログラムのプロトタイプ開発にも利用可能です。
開発したCマクロのソース・ファイルは、変更することなくターゲット・システムに組込むことが可能です。

Cマクロの特長

  • C89(ANSI C)互換に加えbool型や64ビット整数も使用可能
  • #includeや#defineなどのプリプロセッサをサポート
  • ポインタ変数を使ってターゲット空間にアクセス可能
  • 標準ライブラリ関数のサポート(一部)
  • マクロ・エディタで作成からデバッグまで可能
上記の特長に加えて、V7では以下の機能が追加されました。
  • インクルード・パス、マクロ・シンボルの設定ダイアログを追加
  • malloc/free/memcpy/memsetのライブラリ関数を追加
  • 名前空間の独立した複数のCマクロを定義することが可能
  • printfでの64ビット書式%lld,%llxの対応
  • 64ビット数値のサフィックスllの対応

ベンダ提供の初期化ルーチンをマクロ・エディタで実行

C言語と完全互換「Cマクロ」

さらに使いやすく便利に

各種ウィンドウのテキスト画面のファイル保存

  • ウィンドウごとに画面のテキスト保存機能を追加
  • ツール・バーのワンクリックでスクリーンショット的に使用可能
各種ウィンドウのテキスト画面のファイル保存

コード・ウィンドウのPC表示拡張

  • トレース、ステップ実行時にPCの軌跡を5段階で表示
  • 分岐点を見失うことなくプログラム追跡
コード・ウィンドウのPC表示拡張

その他の拡張機能

  • 各種ウィンドウのマークをプロジェクトに保存
  • ファイルのロード・アドレスをアウトプット・ウィンドウに表示
  • プロジェクト起動時に最後に起動したプロジェクトを表示
  • メモリ・ウィンドウに前の表示に[戻る]と[進む]ボタンを追加
その他の拡張機能

他にもある便利な機能紹介

Version7以前から実装されている、便利な機能を紹介します。

ブレーク時のメール送信機能

ターゲットがブレークしたときに指定メール・アドレスにメールを送ります。
例えば、エージング・テスト実行中に異常処理でブレークするようにしておくと、異常停止をメールで知らせてくれます。
ブレーク時のメール送信機能

アンドゥ・トレース機能 (SH/ARMのみ)

アンドゥ・トレースは逆トレース/ステップ実行を仮想的に行う機能です。トレース/ステップ実行時にメモリやレジスタの値を記録しておき、その値を復元することで逆方向へのトレース/ステップ実行を実現します。変数の値も復元されますのでプログラムの追跡の繰り返しが激減します。

アンドゥ・トレースについての詳しい説明はこちらをご覧ください

アンドゥ・トレース機能 (SH/ARMのみ)

ターゲットの状態保存機能 (ARMのみ)

この機能はターゲットの状態を保存し、復元することができる機能です。メモリやレジスタの値をファイルに保存し、そのファイルを読み込むことで仮想的に状態を戻すことができます。
この機能は、ターゲット上で不具合が発生したときの状態を保存して、後で解析を行う場合に有効です。特に発生頻度の低い不具合の状態保存や、出先で発生した問題を持ち帰って解析する場合などに活用できます。

メモリの保存領域はデバッグ情報を用いて最小限に抑えることが可能

ターゲットの状態保存機能 (ARMのみ)

関数スタック・ウィンドウ (ARMのみ)

このウィンドウはETBで取得した実行履歴を関数呼び出しのイメージで表示します。
従来の遷移図に比べると関数呼び出しの関連性や関数の時間が一目でわかるため、プログラムの構造解析が容易になります。
タスクの表示にも対応していますので、タスクごとの関数の動きが理解できるようになっています。

関数スタックの表示画面

関数スタック・ウィンドウ (ARMのみ)