C++test7.3 バグ探偵 リソースリークのカスタマイズについて C++test7.3 バグ探偵 リソースリークのカスタマイズについて (V1.0) 2010/07/14 テクマトリックス株式会社 1 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 目 次 1 はじめに............................................................................................................................................4 2 リソースリークのルールのカスタマイズ方法...................................................................................5 2.1 3 4 リソースリークのカスタマイズ .................................................................................................5 2.1.1 テストコンフィギュレーションの複製 ...............................................................................5 2.1.2 リソースのタイプの追加.....................................................................................................6 2.1.3 ルールパラメーターの変更 .................................................................................................7 リソース関数の設定項目...................................................................................................................8 3.1 リソースアロケーター ...............................................................................................................8 3.2 リソースクローザー...................................................................................................................9 リソース関数の設定例 ....................................................................................................................10 4.1 確保したリソースを戻り値として返す場合 .............................................................................10 4.1.1 サンプルコード.................................................................................................................10 4.1.2 設定例 ...............................................................................................................................11 4.1.3 リソースアロケーター ......................................................................................................11 4.1.4 リソースクローザー..........................................................................................................11 4.2 確保したリソースを引数に割り当てる場合 .............................................................................12 4.2.1 サンプルコード.................................................................................................................12 4.2.2 設定例 ...............................................................................................................................13 4.2.3 リソースアロケーター ......................................................................................................13 4.2.4 リソースクローザー..........................................................................................................14 4.3 関数が呼び出されたオブジェクトにリソースを確保する場合.................................................15 4.3.1 サンプルコード.................................................................................................................15 4.3.2 設定例 ...............................................................................................................................16 4.3.3 リソースアロケーター ......................................................................................................16 4.3.4 リソースクローザー..........................................................................................................17 2 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 改 版 履 歴 日付 2010/07/14 版 1.0 説明 新規作成 --以上-- 3 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 1 はじめに 本書は、C++test7.3 のバグ探偵の 【BD-RES-LEAK: リソースが解放されていることを確認する】のルー ルをカスタマイズする方法について記述した資料です。 4 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 2 リソースリークのルールのカスタマイズ方法 【BD-RES-LEAKS : リソースが解放されていることを確認する】 2.1 リソースリークのカスタマイズ カスタマイズを行なうには、ビルトインのテストコンフィギュレーションを複製し、複製したユーザー定義のテスト コンフィギュレーションをカスタマイズします。 2.1.1 テストコンフィギュレーションの複製 1. メニューより[C++test]>[テストコンフィギュレーション]を選択する 2. テストコンフィギュレーション画面の左側のツリーより[ビルトイン]>[Static Analysis]>[BugDetective (License Required)]を選択し、右クリックしコンテキストメニューから[複製]を選択する 3. [ユーザー定義]のカテゴリに[BugDetective (License Required)]が作成される 5 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 2.1.2 リソースのタイプの追加 1. メニューより[C++test]>[テストコンフィギュレーション]を選択する 2. 複製したテストコンフィギュレーションを選択する 3. [静的]>[バグ探偵オプション]>[リソース]タブを選択する 4. [追加]ボタンでリソースのタイプを追加する 5. 追加した行を選択し、[リソースのタイプ]を入力する 6. [編集]ボタンを選択し、リソース関数を登録する(*) 7. 追加したリソースのタイプを有効に設定し、バグ探偵を実行する * リソース関数の登録方法については、[3.リソース関数の設定項目]を参照 6 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 2.1.3 ルールパラメーターの変更 1. ルールを選択し、右クリックしコンテキストメニューから[ルールパラメーターの表示/変更]を選択する 2. ルールパラメーター画面が表示される 9 [サードパーティのメソッドがリソース参照を格納する可能性があると仮定する] ¾ この設定が有効な場合 バグ探偵は任意のサードパーティ関数にリソースが渡された場合、関数がリソースへの参照を 格納する可能性があると仮定します。このように設定すると、格納された参照を使用して後でリ ソースがクローズされている場合に、違反が誤検出されるのを防ぎますが、実際のリークが違反 として検出されない場合もあります。デフォルトではこの設定は有効です。 ¾ この設定が無効な場合 バグ探偵は、より積極的なアプローチをとりサードパーティの関数がリソースには影響しないと 仮定します。このアプローチでは誤検出の可能性がありますが、設定を有効にした場合のチェッ クでは、見逃される可能性のある実際のリークを検出することができます。 7 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 3 リソース関数の設定項目 3.1 リソースアロケーター 項目 詳細 有効 解析の対象にする場合は、チェックをオンにする 解析の対象から外す場合は、チェックをオフにする 完全修飾名または [リソースアロケーター]で定義した関数の名前空間やクラス名を指定する 名前空間(ワイルドカード) 指定がない場合、グローバル関数とみなす 関数名(ワイルドカード) リソースを確保する関数名を指定する サブクラスの定義 派生クラスの関数もリソースを確保する場合は、チェックをオンにする 派生クラスの関数がリソースを確保しない場合は、チェックをオフにする this オブジェクトがリソース 関数が呼び出されたオブジェクトにリソースを確保する場合は、チェックを オンにする(*1) リソースオブジェクトを返す 確保したリソースを戻り値として返す場合、チェックをオンに設定する(*2) リソースを表すパラメーターの 確保したリソースを引数に割り当てる場合、その引数の番号を設定する 数(1 から開始) (*3) * 1 [4.3 関数が呼び出されたオブジェクトにリソースを確保する場合]を参照 * 2 [4.1 確保したリソースを戻り値として返す場合]を参照 * 3 [4.2 確保したリソースを引数に割り当てる場合]を参照 8 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 3.2 リソースクローザー 項目 詳細 有効 解析の対象にする場合は、チェックをオンにする 解析の対象から外す場合は、チェックをオフにする 完全修飾名または [リソースクローザー]で定義した関数の名前空間やクラス名を指定する 名前空間(ワイルドカード) 指定がない場合、グローバル関数とみなす 関数名(ワイルドカード) リソースを解放する関数名を指定する サブクラスの定義 派生クラスの関数もリソースを解放する場合は、チェックをオンにする 派生クラスの関数がリソースを解放しない場合は、チェックをオフにする this オブジェクトがリソース 関数が呼び出されたオブジェクトのリソースを解放する場合は、チェックを オンにする リソースを表すパラメーターの 解放したリソースを引数に指定する場合、その引数の番号を設定する 数(1 から開始) 9 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4 リソース関数の設定例 4.1 確保したリソースを戻り値として返す場合 4.1.1 サンプルコード int* int_Allocate(int size) { if ( size == 0 ){ return 0; } int *buffer ; buffer = (int*)malloc(size); return buffer; } void int_Free(int* p) { free(p); } // 呼び出し例 void fun() { int *p; p = int_Allocate(sizeof(int)); } 10 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.1.2 設定例 4.1.3 リソースアロケーター 項目 設定例 有効 ○ 完全修飾名または名前空間(ワイルドカード) -- 関数名(ワイルドカード) int_Allocate サブクラスの定義 -- this オブジェクトがリソース -- リソースオブジェクトを返す ○ リソースを表すパラメーターの数(1 から開始) -- * チェックが ON の場合は、「○」 * 入力の必要がない場合、チェックが OFF の場合は、「--」 4.1.4 リソースクローザー 項目 詳細 有効 ○ 完全修飾名または名前空間(ワイルドカード) -- 関数名(ワイルドカード) int_Free サブクラスの定義 -- this オブジェクトがリソース -- リソースを表すパラメーターの数(1 から開始) 1 11 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.2 確保したリソースを引数に割り当てる場合 4.2.1 サンプルコード // 第1引数pにリソースを割り当てる void int_Allocate1(int *p, int size) { p = (int *)malloc(sizeof(size)); } // 第2引数pにリソースを割り当てる void int_Allocate2(int size, int *p) { p = (int *)malloc(sizeof(size)); } // int_Free void int_Free(int* p) { free(p); } // 呼び出し例 void fun() { int *p; int_Allocate1(p, sizeof(int)); } 12 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.2.2 設定例 4.2.3 リソースアロケーター 項目 設定例 有効 ○ 完全修飾名または名前空間(ワイルドカード) -- 関数名(ワイルドカード) int_Allocate1 サブクラスの定義 -- this オブジェクトがリソース -- リソースオブジェクトを返す -- リソースを表すパラメーターの数(1 から開始) 1 * チェックが ON の場合は、「○」 * 入力の必要がない場合、チェックが OFF の場合は、「--」 13 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.2.4 リソースクローザー 項目 詳細 有効 ○ 完全修飾名または名前空間(ワイルドカード) -- 関数名(ワイルドカード) int_Free サブクラスの定義 -- this オブジェクトがリソース -- リソースを表すパラメーターの数(1 から開始) 1 ■ int_Allocate2 の設定例 14 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.3 関数が呼び出されたオブジェクトにリソースを確保する場合 4.3.1 サンプルコード class CustomSample { public: CustomSample(); virtual ~CustomSample(); void int_Allocate() { p = new int; } void int_Free() { delete p; } private: int *p; }; // 呼び出し例 void fun() { CustomSample u; u.int_Allocate(); } 15 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.3.2 設定例 4.3.3 リソースアロケーター 項目 設定例 有効 ○ 完全修飾名または名前空間(ワイルドカード) CustomSample 関数名(ワイルドカード) int_Allocate サブクラスの定義 -- this オブジェクトがリソース ○ リソースオブジェクトを返す -- リソースを表すパラメーターの数(1 から開始) -- * チェックが ON の場合は、「○」 * 入力の必要がない場合、チェックが OFF の場合は、「--」 16 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved C++test7.3 バグ探偵 リソースリークのカスタマイズについて 4.3.4 リソースクローザー 項目 詳細 有効 ○ 完全修飾名または名前空間(ワイルドカード) CustomSample 関数名(ワイルドカード) int_Free サブクラスの定義 -- this オブジェクトがリソース ○ リソースを表すパラメーターの数(1 から開始) -- 以上 17 / 17 Copyright © 2010 Techmatrix Corporation. All rights reserved
© Copyright 2024 ExpyDoc