「ブラウズ」ウィンドウでは、「パターン検索」と「ソースのブラウズ」の 2 種類のブラウズモードを設定することができます。目的別にモードを使い分けてください。
次の場合は、パターン検索モードを選択します。
正規表現を高速検索する場合 (grep 形式)
検索対象のディレクトリ内にソースブラウズ用のデータベースがない場合
関数呼び出しの関係やクラス階層をグラフ表示する必要がない場合
クラスのデータやメンバー関数を調べる必要がない場合
次の場合は、ソースブラウズモードを選択します。
コンパイルコマンドまたはメークファイルに --xsb オプションを追加して、ソースブラウズ用データベースを作成した場合
関数、クラス、構造体、共用体、レコードなどの言語要素や、その使用、定義、割り当て個所を検索する場合
関数呼び出しの関係やクラス階層をグラフ表示する場合
クラスのデータやメンバー関数を調べる場合
パターン検索モードでは、「ブラウズ」ウィンドウを使って正規表現や単純な文字列を検索することができます。
sb_init ファイルにリストアップされているすべてのディレクトリが検索されます(「データベースのインポート」を参照)。
図 3-2 に、パターン検索モードの「ブラウズ」ウィンドウを示します。ウィンドウ内の他の構成要素については、図 3-1 を参照してください。
「パターン」テキストフィールド |
検索する正規表現を入力します。 |
「ファイル」テキストフィールド |
検索用のファイルフィルタを指定します。 |
パターンを検索する場合は、次の手順に従ってください。
Sun WorkShop メインウィンドウで、「ブラウズ」⇒「パターン検索」を選択します。または、「ブラウズ」ボタンをクリックした後、「ブラウズ」ウィンドウで「パターン検索」ラジオボタンをクリックします。
「ブラウズ」ウィンドウのタイトルバーに正しいブラウズ対象ディレクトリが選択されていることを確認します。
正しくない場合は、「ブラウズ」⇒「ブラウズ対象ディレクトリを変更」を選択して、「パターン検索ディレクトリ」ダイアログボックスで正しいディレクトリを選択します。
「パターン」テキストフィールドに検索するパターンを入力します。
検索するシンボルの正確な名前がわからない場合は、ワイルドカード文字 (.、*、^、$) を使用することができます。「パターンの特殊文字」を参照してください。
「ファイル」テキストフィールドにフィルタを入力します。
デフォルトフィルタでは、現在のディレクトリにある.h、.c、.cc、.f で終わるすべてのファイルが検出されます。ワークセットを保存するたびに、新たに選択したフィルタが保存されます。
パターン検索では、複数のディレクトリの検索に sb_init ファイルを使用することができます。この場合、各ディレクトリにファイルフィルタが適用されます。
Return キーを押して「問い合わせ」⇒「一致するものを検索」を選択するか、「一致するものを検索」ボタンをクリックします。
「次の一致」、「前の一致」ボタンをクリックするか、メニュー項目を選択して、「一致」区画のリスト内を移動します。F5 キー、Shift + F5 キーを押しても、同じ操作が可能です。
「一致」区画内をクリックすると、エディタウィンドウにソースが表示されます。
一致項目が多すぎる場合は、「ファイル」テキストフィールドで、検索するファイルの種類を絞り込んでください。
エディタウィンドウに表示されているテキスト文字を検索することができます。エディタウィンドウのテキストをダブルクリックでコピーして、「ブラウズ」ウィンドウのテキストフィールドでマウスの中央ボタンをクリックすると、テキストがペーストされます。vi または XEmacs を使用している場合は、エディタウィンドウでテキストを選択してツールバーの「検索」ボタンをクリックすると、同じように検索を行うことができます。
検索条件を指定する際は、コードに出現するパターンを正確に入力するほか、特殊文字を使用することもできます。表 3-1 に、使用可能な特殊文字を示します。
表 3-1 パターンの特殊文字
文字 |
意味 |
例 |
---|---|---|
ピリオド (.) |
任意の文字 |
l.nes は lanes または lines の両方に一致 |
アスタリスク (*) |
任意の文字列 (パターンの最初の文字として使用する場合を除く) |
「file」を含み、任意の文字と () を伴う文字列に一致 (traffic_file_close()、file_save_popup など)。ただし「*file.」は、「file」で始まる文字列のみに一致 |
サーカムフレックス (^) |
行頭で一致 |
^tr* は、traffic、truck など、tr で始まる行に一致 |
ドル記号 ($) |
行末で一致 |
lanes$ は、lanes で終わる行に一致 |
たとえば、コード内で使用されている window_popup というインスタンスのうち、行頭にあるものだけを検索したい場合、次の問い合わせを入力します。
^window_popup*
サーカムフレックス (^) を指定すると、コードの行頭で一致する個所だけが検索されます。一方、アスタリスク (*) を指定すると、window_popup_name_objects、window_popup1_objects など、window_popup という文字列で始まる個所がすべて検索されます。
サーカムフレックスとドル記号で問い合わせ内容を囲むと、行全体が一致している個所だけが検索されます。
ソースブラウズモードでは、関数、クラス、構造体、共用体、レコードなどの言語要素や、その使用方法、定義、割り当て個所を検索することができます。また、関数呼び出しの関係やクラス階層をグラフ表示したり、クラスのデータやメンバー関数を検査することもできます。
ソースブラウザは、プログラムの静的構造が記述されたデータベースから必要な情報を取得して検索を行います。ソースブラウズを行うためには、コンパイルコマンドかメークファイルに --xsb オプションを指定して、ソースブラウズ用のデータベースを作成しておく必要があります。
ブラウザの機能は、データベースの使用・不使用や、使用するデータベースの種類によって、少しずつ異なっています。
コンパイラ生成データベース |
すべてのブラウザ機能を利用可能 |
---|---|
タグ生成データベース |
関数や大域変数の問い合わせと、関数呼び出しの表示が可能 |
データベースなし |
「パターン検索」モードしか利用することができない |
コンパイラ生成データベースの代わりにタグ生成データベースを使用すると、次のような利点があります。
ソースコードが不完全であったり、構文上の誤りがあるためにソースコードをコンパイルできない場合でも、タグデータベースは生成される
タグデータベースは、コンパイラ生成データベースを生成するよりも短時間で生成される
タグデータベースは、コンパイラ生成データベースよりもサイズが小さい
ソースブラウザ用のオプションを指定してソースファイルをコンパイルすると、ファイルの情報を格納したデータベースが作成されます。ソースブラウザは、このデータベースを検索して問い合わせに応答します。
コンパイラ生成データベースを作成すると、すべてのブラウズ機能を利用することができます。
ブラウズ用データベースを生成するには、使用するメークファイルにソースブラウザ用オプションを指定します。
言語 |
ソースブラウザ用のオプション |
---|---|
C++ |
-xsb または -sb |
ANSI C |
-xsb |
FORTRAN 77 |
-xsb または -sb |
アセンブラ |
-b |
タグデータベースを使用すると、コンパイルを行わないで、簡単にソースファイルをブラウズすることができます。このデータベースは、ソースファイルの字句解析に基づいています。すべての言語の構造が正しく認識されるわけではありませんが、コンパイルすることができないファイルでも使用可能です。
ソースブラウズタグの形式は、ctag とは異なっています。ここで説明するタグは、ソースブラウズ専用の形式になっています。
タグデータベースを使用したブラウズには、次のような制限があります。
局所関数に関する問い合わせを発行することができない
クラスをブラウズすることができない
複雑な問い合わせを行う機能に制限がある
問い合わせをフォーカスする機能に制限がある
タグデータベースは、変数、型、関数の大域的な定義のみを認識し、関数呼び出しに関する情報を収集します。C++ のメンバーに対する関数呼び出しは、明示的に呼び出された場合に限り認識されます。
タグデータベースを作成する場合は、次の手順に従ってください。
「ブラウズ」ウィンドウで、「ブラウズ」⇒「タグデータベース作成」を選択します。
「タグデータベース作成」ダイアログボックスで、「了解」ボタンをクリックしてデフォルトのファイルフィルタを適用するか、検索対象ファイルの型を入力して 「了解」をクリックします。
タグデータベースが作成されます。
ソースファイルが複数のディレクトリに保存されている場合、それぞれのディレクトリでコンパイル処理を行うことになります。このため、ディレクトリごとに別々のソースブラウザが生成されます。
1 回のブラウズで検索されるデータベースは 1 つだけなので、現在のディレクトリにあるファイルしか検索されません。このデフォルト設定を変更するためには、データベースをインポートする必要があります。
複数のデータベースを、マージしないでインポートすることができます。sb_init ファイルを使用して複数のデータベースを読み込むと、このファイルが収められているディレクトリをブラウズすることができます。
データベースをインポートする場合は、次の手順に従ってください。
sb_init ファイルの格納場所を指定します。
コンパイル処理を行う各ディレクトリの sb_init ファイルに import コマンドを追加します。
import absolute_or_relative_pathname
absolute_or_relative_pathname には、パス名 (絶対パスまたは相対パス) を指定します。
SUNPRO_SB_INITFILE_NAME 環境変数に sb_init ファイルを設定します。
setenv SUNPRO_SB_INIT_FILE_NAME path to sb_init file/sb_init
path to sb_init file には、sb_init ファイルが入っているディレクトリのパスを指定します。
ソースツリー全体のソースファイルを検索したり、データベースをブラウズしたい場合には、インポートオプションを指定します。ソースツリー内の各ディレクトリの sb_init ファイルに import コマンドを追加してください。
sb_init ファイルは、パターン検索モードで、複数のディレクトリからソースファイルを検索する場合や、ソースブラウズモードで、複数のディレクトリからブラウザデータベース (オブジェクトファイルを保存) を検索する場合に使用します。このため、sb_init ファイルに import コマンドを指定して、ソースディレクトリとオブジェクトディレクトリの両方を検索することもできます。
図 3-3 に、ソースブラウズモードの「ブラウズ」ウィンドウを示します。ウィンドウの他の構成要素については、図 3-1 を参照してください。
「一致」リスト |
問い合わせる項目にフィルタを設定し、特定の使用例だけを検索することができます。選択可能な型には次のものがあります。 |
|
「一致するもの全部」 指定した項目に一致する項目をすべて表示 |
|
「指定項目の参照」 指定した項目の参照をすべて表示 |
|
「指定項目の定義」 指定した項目の定義をすべて表示 |
|
「指定項目への代入」 指定した項目への代入内容をすべて表示 |
「一致」テキストフィールド |
検索対象の問い合わせる内容を指定します。 |
「型」リスト |
問い合わせる項目にフィルタを設定することができます。選択可能な型には次のものがあります。 |
|
「全部」言語要素の型を制限しない |
|
「メンバー/フィールド」クラスメンバーまたはレコードフィールド |
|
「クラス/構造体/記録」クラス、構造体、または記録 |
|
「静的」静的記憶域を持つ関数または変数 |
|
「関数」関数 |
|
「記号的定数」記号名で参照される定数。ENUM メンバー、PARAMETER 文で定義した定数、セットメンバー、#define マクロ (引数あり・引数なし) など |
「スコープ」リスト |
ソースに含まれる特定の要素だけを検索します。シェル形式の式がサポートされています。選択可能な構成要素には次のものがあります。 |
|
「全部」指定した項目の検索範囲を制限しない |
|
「プログラム/ライブラリ」指定したプログラムまたはライブラリファイルの中だけを検索 |
|
「クラス/構造体」指定したクラスまたは構造体の中だけを検索 |
|
「関数」指定した関数の中だけを検索 |
|
「ソースファイル」指定したソースファイルの中だけを検索 |
-sb オプションや -xsb オプションを指定してアプリケーションをコンパイルします。
このオプションは、コンパイラに、ブラウズ用データベースを生成するように指示します。「ブラウザデータベースの生成」を参照してください。
「ブラウズ」⇒「ソースのブラウズ」を選択するか、Sun WorkShop メインウィンドウのツールバーで「ブラウズ」ボタンをクリックして「ブラウズ」ウィンドウを表示し、「ソースのブラウズ」ラジオボタンをクリックします。
「ブラウズ」ウィンドウのタイトルバーに正しいブラウズディレクトリが表示されていることを確認します。
ブラウズディレクトリが正しくない場合は、「ブラウズ」⇒「ブラウズ対象ディレクトリを変更」を選択した後、「ソースブラウザのデータベースディレクトリ」ダイアログボックスで、ソースブラウザデータベースが格納されているディレクトリを選択します。
複数のブラウズ用データベースディレクトリからファイルを検索できます。「複数のディレクトリの検索」を参照してください。
テキストフィールドに検索内容を入力して、「問い合わせ」⇒「一致するものを検索」を選択するか「一致するものを検索」ボタンをクリックします。
問い合わせの書式については、「問い合わせの書式」を参照してください。
一致、型、スコープのいずれかをプルダウンリストから選択して、検索で一致した項目の数を制限します。
このリストについては、「ソースブラウズモードのブラウズウィンドウ」を参照してください。問い合わせの制限については、Sun WorkShop オンラインヘルプの該当項目を参照してください。
次のいずれかの方法で、「一致」区画内を移動することができます。
マウスを使用する
「次の一致」ボタンや「前の一致」ボタンをクリックする
F5 キーや Shift + F5 キーを押す
メニュー項目を使用する
各一致項目の行には、ソースファイル名、行番号、その行のテキストが記載されます。一致項目は、定義ではじまり、宣言で終わるようにソートされています。定義と宣言の間には、その他の一致項目がリストアップされています。各グループ内では、ファイル名のアルファベット順に、行番号の小さいものから表示されます。
一致項目をクリックして、エディタウィンドウにソースを表示します。
コールグラファ、クラスグラファ、またはクラスブラウザを起動して、ソース内の関係を表示します。
ソースブラウズモードで問い合わせを行うと、検索フィールドに入力されたシンボル、文字列定数、検索パターンに一致する全項目が検索されます。
問い合わせに一致したコード内のシンボルはすべて「一致項目」と呼ばれます。
通常、予約語の問い合わせはできませんが、ANSI C や C++ 言語で定義された型名の問い合わせは可能です。たとえば、ANSI C や C++ のプログラムでは、int、float、double、long を問い合わせの対象に指定できます。ただし、Fortran のプログラムでは、integer や print の問い合わせはできません。
変数、関数、型、定数、マクロのいずれも検索可能です。ブラウズする対象が何であるか不明確な場合は、以前にプログラムで使用した main か他の識別子を選択して検索を開始してください。
コードのとおりに正確に名前や関数を入力するほか、ワイルドカード文字で文字列を指定することもできます。
テキストフィールドに入力する問い合わせには、表 3-2 のワイルドカード文字を使用します。
表 3-2 問い合わせの特殊文字
文字 |
意味 |
例 |
---|---|---|
ピリオド (.) |
任意の文字 |
.ehicle は、vehicle または Vehicle に一致 |
アスタリスク (*) |
任意の数の文字 (直前の文字のゼロ回以上の繰り返しを含む) |
vehi.* は、vehicle_length() など、vehi で始まるすべての文字列に一致。ただし、vehi* の場合、vehi には一致するが、vehicle_length() には一致しない |
二重コロン演算子 (::) は、C++ のメンバー関数または最上位関数を次のように修飾します。
多重定義された名前−異なった引数型として使用されている同一の名前
あいまいな名前−異なったクラスで使用されている同一の名前
class_name::function_name
class_name にはクラス名、function_name には関数名を指定します。
たとえば、hand::grasp のように指定します。
RW::ListPtr::insert() を検索するには、次の正規表現が可能です。
insert ListPtr::insert RW::ListPtr::insert
最初の 2 つの正規表現は、「.*::.*::insert」、「.*::ListPtr::insert」と同じであり、より多くのシンボルと一致します。insert は、「insert」という名前の関数またはメンバー関数すべてと一致します。「.*insert」と指定する必要はありません。