Sun WorkShop 入門

付録 D sbquery、sb_init、sbtags によるソースのブラウズ

この付録では、次の事項について説明します。

この章では、Sun WorkShop から実行できる操作をコマンド行で実行する方法について説明します。ソースのブラウズ機能の概念情報については、第 3 章「ソースコードのブラウズ」と Sun WorkShop のオンラインヘルプを参照してください。

この付録は、次の各節で構成されています。

sbquery によるソースのブラウズ

sbquery コマンドは、端末または端末をエミュレートするワークステーションからアクセスできるコマンド行ブラウズ環境を提供します。

sbquery について

sbquery は、Sun WorkShop のソースブラウズモードに対応するコマンド行インタフェースです。

コマンド行から問い合わせを発行するには、sbquery と入力した後に、コマンド行のオプションと引数、検索対象のシンボルを順に指定します。


sbquery options symbols

symbols を含む行がすべて表示されます。

シンボルを含むファイル、行番号、シンボルを含む関数、シンボルを含むソース行が、sbquery によって「一致」リストに表示されます。

デフォルトでは、sbquery は現在の作業用ディレクトリのデータベースでシンボルを検索します。別のディレクトリに格納されているデータベースをブラウズしたい場合は、sb_init によるブラウザデータベースの制御」を参照してください。

コマンドリファレンス

sbquery のコマンド行オプションを一覧表示するには、シェルプロンプトで sbquery と入力します。表 D-1 に、このコマンドのオプションを示します。

表 D-1 sbquery のオプション

引数 

説明 

-break_lock

データベースのロックを解除する。索引ファイルの更新が異常終了した後に問い合わせを発行すると、データベースがロックされているというメッセージが表示され、この引数が必要になることがある。なお、このオプションを使用した後には、データベースの状態が不整合になる可能性がある (整合性を確保するには、データベースディレクトリを削除してから、プログラムを再コンパイルする)ビルダー 

-help

sbquery コマンドの形式を表示する。sbquery をオプションなしで入力しても同じ

-help_focus

ディレクトリ内の特定のプログラムのみを問い合わせるためのフォーカスオプションのリストを表示する。このオプションを使用して、プログラムや関数といった特定のコード単位のみに対して問い合わせを発行できる 

-help_filter

フィルタオプションを使用できる言語のリストを表示する。フィルタオプションを使用して、シンボルをプログラム内での使い方に基づいて検索する 

-max_memory size

索引ファイルの構築時、sbquery が一時ファイルを使用する前に割り当てる必要のあるメモリー容量の概算 (メガバイト単位)

-no_update

コンパイルの後に問い合わせを発行するときに索引ファイルを再構築しない。このオプションを指定しないでコンパイルまたは再コンパイルの後に問い合わせを発行すると、データベースによって問い合わせの更新と処理が行われる 

-o file

問い合わせの出力をファイルに送信する 

-show_db_dirs

問い合わせを発行したときに走査されたデータベースディレクトリのリストを表示する。リストに含まれるのは、現在の作業ディレクトリ内のデータベースディレクトリと、sb_init ファイルの import または export コマンドで指定されたその他すべてのデータベースディレクトリ

-version | -V

現在のバージョン番号を表示する  

-files_only

検索対象のシンボルが含まれるファイルのみをリスト表示する 

-no_secondaries

一次的一致のみを返し、二次的一致を返さない。二次的一致とは、マクロ内部の識別子。フィルタ付き問い合わせを多数発行し、問い合わせ内容に一致するシンボルが多くのマクロで使用されている場合、二次一致をオフにすることができる 

-no_source

各一致に関連するファイル名と行番号だけを表示する 

-symbols_only

検索パターン内のパターンに一致するシンボルのリストを表示する。問い合わせでワイルドカードを使用する場合に役立つ 

-pattern symbol

ダッシュ (-) など、特別な文字を含むシンボルを問い合わせる。このオプションでは、コマンド行オプションのようなシンボルに対する問い合わせが可能。たとえばシンボル -help の問い合わせは、sbquery では 通常の -help オプションと区別される

-no_case

問い合わせで大文字と小文字を区別する 

-sh_pattern

ワイルドカードを含む問い合わせを発行するときにシェルスタイルの式を使用する。このワイルドカードの設定はデフォルト。同じコマンド行で別のパターンマッチングを実行している場合、このオプションを指定する。シェルスタイルのパターンマッチングについては、sh(1) を参照

-reg_expr

ワイルドカードを含む問い合わせを発行するときに正規表現を使用する。このオプションを指定しないと、シェルスタイルのパターンとみなされる 

-literal

問い合わせにワイルドカード表現を使用しない。別のワイルドカードスキーマからメタキャラクタの含む文字列を検索したい場合に役立つ 

検索を絞り込むためのオプションには、フィルタオプション (表 D-2) とフォーカスオプション (表 D-3) の 2 種類があります。

言語フィルタオプション

表 D-2 のフィルタオプションでは、プログラム内でそのシンボルがどのように使用されているかに応じて、シンボルを検索します。たとえば、フィルタオプションを使用して、変数の宣言に検索対象を限定することができます。


sbquery -help_filter language

表 D-2 言語フィルタオプション

フィルタオプション 

説明 

ansi_c

sun_as

アセンブリ言語 

sun_c_plus_plus

C++ 

sun_f77

FORTRAN 77 

sun_f90

Fortran 90 

フォーカスオプション

表 D-3 のフォーカスオプションでは、特定のプログラム、関数、ライブラリなど、検索対象がコードの特定のクラスに限定されます。

sbquery focus_option symbol

表 D-3 フォーカスオプション

フォーカスオプション 

説明 

-in_program program

プログラムでの一致のみを問い合わせる 

-in_directory directory

ディレクトリでの一致のみを問い合わせる 

-in_source_file source_File

ソースファイルでの一致のみを問い合わせる 

-in_function function

関数での一致のみを問い合わせる 

-in_class class

クラスでの一致のみを問い合わせる 

-in_template template

テンプレートでの一致のみを問い合わせる 

-in_language language

言語での一致のみを問い合わせる 


注 -

フォーカスオプションを 2 つ以上指定した場合、いずれかに一致するものが検出されると一致項目が返されます。


環境変数

環境変数は、sbquery (および Sun WorkShop のソースブラウザ) の操作に影響する情報を提供します。sb_init の詳細については、sb_init によるブラウザデータベースの制御」を参照してください。

変数 

説明 

HOME

ログインディレクトリの名前 

PWD

現在のディレクトリの完全パス名 

SUNPRO_SB_ATTEMPTS_MAX

ロックされたデータベースに対して索引ビルダーがアクセスを試行する最大回数 

SUNPRO_SB_EX_FILE_NAME

sun_source_browser.ex ファイルの絶対パス名

SUNPRO_SB_INIT_FILE_NAME

sb_init ファイルの絶対パス名

sb_init によるブラウザデータベースの制御

この節では、複数のディレクトリにデータベースが格納されているソースファイルでの作業方法について説明します。デフォルトでは、現在の作業用ディレクトリにデータベースが作成され、問い合わせを発行するとそのデータベースが検索されます。

sb_init について

テキストファイル sb_init は、Sun WorkShop のソースブラウズモードとコンパイラで使用されます。sbtag は、ソースブラウズデータベースの構造に関する制御情報を取得します。複数のディレクトリにデータベースが格納されているソースファイルで作業したいときに、sb_init を使用してください。

sb_init ファイルは、ソースブラウズ、コンパイラ、sbtags の実行ディレクトリに配置してください。これらのツールは、現在の作業ディレクトリで sb_init ファイルを検索します。

sb_init ファイルの移動

デフォルトでは、現在の作業ディレクトリで sb_init ファイルが検索されます。別のディレクトリで sb_init ファイルを検索するように Sun WorkShop とコンパイラに指示するには、環境変数 SUNPRO_SB_INIT_FILE_NAME/<検索するディレクトリ>/sb_init に設定します。

ファイルコマンド

sb_init コマンドを使用するには、コマンドをファイルに追加します。sb_init ファイルの場合、次のコマンドのみを使用できます。

このコマンドには、import コマンドの機能もあります。

コマンドリファレンス

import


import /pathname to directory

Sun WorkShop のソースブラウズモードの場合、現在の作業用ディレクトリ以外のディレクトリにデータベースを読み込むことができます。このため、ディレクトリごとに個別のデータベースを保持できます。

たとえば、プロジェクト A のプログラマがプロジェクト B のディレクトリに書き込むこともその逆もできないように、管理権限を設定されているとします。この場合、プロジェクト A とプロジェクト B は、それぞれ独自のデータベースを保持する必要があります。どちらのデータベースも、他方のプロジェクトのプログラマからは読み取りしかできず、書き込みはできません。

図 D-1では、現在の作業用ディレクトリは /project/source1 です。source2 のデータベースを読み取るには、どちらかのコマンドを source1sb_init ファイルに指定します。


import /project/source2
import ../source2

図 D-1 import の例

Graphic

export


export prefix into path

このコマンドは、コンパイラと sbtags に、ソースファイルのデータベース構成要素ファイルの書き込みを実行させます。この場合、Sun WorkShop のソースブラウズモードとコンパイラで使用される現在の作業用ディレクトリ以外のディレクトリに書き込まれます。

接頭辞で始まる完全パス名の付いたソースファイルをコンパイラが処理する場合、生成されるブラウザデータベース (.bd) ファイルは path に格納されます。

export コマンドには pathimport コマンドが暗黙的に含まれているので、エクスポートされたデータベース構成要素は Sun WorkShop のソースブラウズモードで自動的に読み込まれます。

export コマンドでは、/usr/include#include など、同じファイルと関連付けられたデータベースファイルを単一のデータベースに配置してディスク空間を節約できますが、各プロジェクトにおける個別のデータベースも保持されます。

sb_init ファイルに複数の export コマンドが含まれている場合、特定の順序で並べ替える必要があります。コンパイラは、sb_init ファイルに記述された順序に従って export コマンドを走査します。

図 D-2では、データベースサブディレクトリの /usr/include にあるファイルに対して作成された .bd ファイルと索引ファイルを sys サブディレクトリに配置するため、source1sb_init ファイルの中で export コマンドを指定しています。


export /usr/include into /project/sys

図 D-2 export の例 1

Graphic

構成の中で source2 ディレクトリの sb_init ファイルに同じ export コマンドが含まれているとします。この場合、同じデータベースファイルを 2 つ作成する必要はないので、ディスク空間を節約できます。stdio.h ファイルの場合、コンパイラは stdio.h のデータベースを 1 つ、sys サブディレクトリに作成します。

sb_init ファイルの暗黙的な exportinto コマンドは、export コマンドで明示的に指定されていないソースファイルに対して作成されたデータベースファイルを現在の作業用ディレクトリに格納するように、コンパイラに指示します。図 D-2 では、a.ccb.cc と関連付けられた .bd ファイルが、source1 ディレクトリのデータベースサブディレクトリに格納されています。

sb_init ファイルで export コマンドを指定すると、暗黙的な import コマンドによって、指定されたデータベースが読み取られます。図 D-2 の構成の場合、問い合わせを発行するたびに、sys サブディレクトリ内のデータベースと source1 ディレクトリ内のデータベースが検索されます。

次に、source1sb_init ファイルにユーザーがこの export コマンドを指定した例を挙げます。


export /project/include into /project/include

図 D-3 に示すように、データベースサブディレクトリの /project/include のファイルに対して作成されたデータベースファイルと索引ファイルが /project/include サブディレクトリに格納されます。/project/include のデータベースは、暗黙的な import コマンドによって読み取られます。

図 D-3 export の例 2

Graphic

include ファイルが標準以外の位置にある場合でも、データベースファイルは共通サブディレクトリに格納されます。プロジェクト内で同じ include ファイルに対して多数の異なったディレクトリから複数の参照がある場合、export コマンドはディスク空間を節約します。

replacepath


replacepath from_prefix to_prefix

このコマンドは、ソースブラウズデータベース内のパス名を変更する方法を指定します。

一般的に、from-prefix はオートマウンタの「マウントポイント」 (オートマウンタが実際にファイルシステムをマウントする場所のパス名) であり、to-prefix はオートマウンタの「トリガーポイント」 (開発者が使用する既知のパス名) です。

オートマウンタの使い方は柔軟性に富んでおり、ホストによって異なる場合があります。

デフォルトの replacepath コマンドを使用して、オートマウンタのアーティファクトを削除します。


replacepath /tmp_mnt

このためには、コマンドの第 1 引数にマウントポイント、第 2 引数にトリガーポイントを指定する必要があります。

automount-prefix


automount-prefix mount_point trigger_point

automount-prefix コマンドを使用すると、プログラムのコンパイルに使用していないコンピュータでブラウズできるようになります。このコマンドは、automount-prefix のパス変換がコンパイル時に行われてデータベースに書き込まれる点を除けばreplacepath コマンドと同じです。

automount-prefix コマンドは、データベースに格納されている名前からどのオートマウンタの接頭辞を削除するかを定義します。オートマウンタがファイルシステムをマウントするディレクトリは mount_point です。trigger_point は、エクスポートされたファイルシステムにアクセスするための接頭辞であり、デフォルトは / です。

データベース内のパスで失敗した場合、automount_prefix コマンドと replacepath コマンドからのパス変換は、ブラウズ中にソースファイルを検索するために使用されます。

一見すると、両方のパスの検索は不可能と思われます。コンパイラの実行中に作成されたブラウザデータベースには、各ソースファイルの絶対パスが格納されています。絶対パスがコンピュータ間で統一されていないと、問い合わせに応答するときに Sun WorkShop がソースファイルを表示できません。

この問題については、次のいずれかの方法で対処できます。

デフォルトの automount-prefix コマンドは、オートマウンタのアーティファクトの削除に使用されます。


automount-prefix /tmp_mnt /

automount-prefix コマンドが指定されていない場合に限り、デフォルトの規則が生成されます。

オートマウンタの使い方に関する詳細は、automount(1M) のマニュアルページを参照してください。

cleanup-delay

索引の再構築から関連するデータベースのガベージコレクトまでの時間を制限します。制限時間を超過すると、コンパイラは自動的に sbcleanup を呼び出します。デフォルトでは 12 時間です。

sbtags によるブラウズ情報の収集

sbtags コマンドを使用して、ソースファイルからブラウズ情報を簡単に収集することができます。この方法を利用すると、完全にコンパイルされないプログラムに対しても最低限のブラウズ情報を収集できます。

sbtags について

sbtags コマンドは、コンパイルで使用可能な情報のサブセットを収集します。ただし、簡略化された情報では、一部のブラウズ機能に制限があります。sbtags で生成されたデータベースにより、関数や変数に問い合わせを実行したり、関数呼び出しグラフを表示することができます。

現在、tags データベースには次の制限があります。

通常、ファイルが変更された場合には、再度走査して変更をデータベースに取り込む必要はありません。

sbtags データベースは、ソースファイルの字句解析に基づいています。このデータベースは、すべての言語構造を正しく識別するとは限りませんが、コンパイルされないファイルでも動作し、再コンパイルよりも高速に実行されます。

sbtags は、変数、型、関数の定義を認識し、関数呼び出しの情報を収集します。関数呼び出しの情報以外は収集されません。特に、複雑な問い合わせに関する他の意味情報は収集されません。

sbtags の機能は、コールグラファを除き、ctagsetags と類似しており、定義とグラフ化に関するデータベースへの直接の問い合わせと、パターンマッチングによる問い合わせを組み合わせることができます。

sbtag で生成されたデータベースには、次の特徴があります。

sbtags データベースを生成する方法

sbtags を使用してブラウズデータベースを生成するには、sbtags と入力した後に、生成するデータベースの名前を 1 つ以上指定します。


sbtags file ...