この付録では、次の事項について説明します。
コマンド行ユーティリティ sbquery を使用したソースコードのブラウズ
データベース情報が複数のディレクトリに格納されているソースファイルの使い方
sbtags コマンドを使用したソースファイルからのブラウズ情報の収集
この章では、Sun WorkShop から実行できる操作をコマンド行で実行する方法について説明します。ソースのブラウズ機能の概念情報については、第 3 章「ソースコードのブラウズ」と Sun WorkShop のオンラインヘルプを参照してください。
この付録は、次の各節で構成されています。
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
フィルタオプション |
説明 |
---|---|
ansi_c |
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 は、Sun WorkShop のソースブラウズモードとコンパイラで使用されます。sbtag は、ソースブラウズデータベースの構造に関する制御情報を取得します。複数のディレクトリにデータベースが格納されているソースファイルで作業したいときに、sb_init を使用してください。
sb_init ファイルは、ソースブラウズ、コンパイラ、sbtags の実行ディレクトリに配置してください。これらのツールは、現在の作業ディレクトリで sb_init ファイルを検索します。
デフォルトでは、現在の作業ディレクトリで sb_init ファイルが検索されます。別のディレクトリで sb_init ファイルを検索するように Sun WorkShop とコンパイラに指示するには、環境変数 SUNPRO_SB_INIT_FILE_NAME を /<検索するディレクトリ>/sb_init に設定します。
sb_init コマンドを使用するには、コマンドをファイルに追加します。sb_init ファイルの場合、次のコマンドのみを使用できます。
import − 現在の作業用ディレクトリ以外のディレクトリにデータベースを読み込む
export − 特定のソースファイルと関連付けられたデータベース構成要素ファイルを、コンパイラの現在の作業ディレクトリ以外のディレクトリに書き込む
このコマンドには、import コマンドの機能もあります。
automount-prefix − プログラムのコンパイルに使用していないコンピュータで、そのプログラムのソースファイルをブラウズする
replacepath − データベースで検索するファイル名のパスをどのように変更するかを指定し、データベースを移動する
import /pathname to directory
Sun WorkShop のソースブラウズモードの場合、現在の作業用ディレクトリ以外のディレクトリにデータベースを読み込むことができます。このため、ディレクトリごとに個別のデータベースを保持できます。
たとえば、プロジェクト A のプログラマがプロジェクト B のディレクトリに書き込むこともその逆もできないように、管理権限を設定されているとします。この場合、プロジェクト A とプロジェクト B は、それぞれ独自のデータベースを保持する必要があります。どちらのデータベースも、他方のプロジェクトのプログラマからは読み取りしかできず、書き込みはできません。
図 D-1では、現在の作業用ディレクトリは /project/source1 です。source2 のデータベースを読み取るには、どちらかのコマンドを source1 の sb_init ファイルに指定します。
import /project/source2 import ../source2
export prefix into path
このコマンドは、コンパイラと sbtags に、ソースファイルのデータベース構成要素ファイルの書き込みを実行させます。この場合、Sun WorkShop のソースブラウズモードとコンパイラで使用される現在の作業用ディレクトリ以外のディレクトリに書き込まれます。
接頭辞で始まる完全パス名の付いたソースファイルをコンパイラが処理する場合、生成されるブラウザデータベース (.bd) ファイルは path に格納されます。
export コマンドには path の import コマンドが暗黙的に含まれているので、エクスポートされたデータベース構成要素は Sun WorkShop のソースブラウズモードで自動的に読み込まれます。
export コマンドでは、/usr/include の #include など、同じファイルと関連付けられたデータベースファイルを単一のデータベースに配置してディスク空間を節約できますが、各プロジェクトにおける個別のデータベースも保持されます。
sb_init ファイルに複数の export コマンドが含まれている場合、特定の順序で並べ替える必要があります。コンパイラは、sb_init ファイルに記述された順序に従って export コマンドを走査します。
図 D-2では、データベースサブディレクトリの /usr/include にあるファイルに対して作成された .bd ファイルと索引ファイルを sys サブディレクトリに配置するため、source1 の sb_init ファイルの中で export コマンドを指定しています。
export /usr/include into /project/sys
構成の中で source2 ディレクトリの sb_init ファイルに同じ export コマンドが含まれているとします。この場合、同じデータベースファイルを 2 つ作成する必要はないので、ディスク空間を節約できます。stdio.h ファイルの場合、コンパイラは stdio.h のデータベースを 1 つ、sys サブディレクトリに作成します。
sb_init ファイルの暗黙的な export と into コマンドは、export コマンドで明示的に指定されていないソースファイルに対して作成されたデータベースファイルを現在の作業用ディレクトリに格納するように、コンパイラに指示します。図 D-2 では、a.cc、b.cc と関連付けられた .bd ファイルが、source1 ディレクトリのデータベースサブディレクトリに格納されています。
sb_init ファイルで export コマンドを指定すると、暗黙的な import コマンドによって、指定されたデータベースが読み取られます。図 D-2 の構成の場合、問い合わせを発行するたびに、sys サブディレクトリ内のデータベースと source1 ディレクトリ内のデータベースが検索されます。
次に、source1 の sb_init ファイルにユーザーがこの export コマンドを指定した例を挙げます。
export /project/include into /project/include
図 D-3 に示すように、データベースサブディレクトリの /project/include のファイルに対して作成されたデータベースファイルと索引ファイルが /project/include サブディレクトリに格納されます。/project/include のデータベースは、暗黙的な import コマンドによって読み取られます。
include ファイルが標準以外の位置にある場合でも、データベースファイルは共通サブディレクトリに格納されます。プロジェクト内で同じ include ファイルに対して多数の異なったディレクトリから複数の参照がある場合、export コマンドはディスク空間を節約します。
replacepath from_prefix to_prefix
このコマンドは、ソースブラウズデータベース内のパス名を変更する方法を指定します。
一般的に、from-prefix はオートマウンタの「マウントポイント」 (オートマウンタが実際にファイルシステムをマウントする場所のパス名) であり、to-prefix はオートマウンタの「トリガーポイント」 (開発者が使用する既知のパス名) です。
オートマウンタの使い方は柔軟性に富んでおり、ホストによって異なる場合があります。
デフォルトの replacepath コマンドを使用して、オートマウンタのアーティファクトを削除します。
replacepath /tmp_mnt
このためには、コマンドの第 1 引数にマウントポイント、第 2 引数にトリガーポイントを指定する必要があります。
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) のマニュアルページを参照してください。
索引の再構築から関連するデータベースのガベージコレクトまでの時間を制限します。制限時間を超過すると、コンパイラは自動的に sbcleanup を呼び出します。デフォルトでは 12 時間です。
sbtags コマンドを使用して、ソースファイルからブラウズ情報を簡単に収集することができます。この方法を利用すると、完全にコンパイルされないプログラムに対しても最低限のブラウズ情報を収集できます。
sbtags コマンドは、コンパイルで使用可能な情報のサブセットを収集します。ただし、簡略化された情報では、一部のブラウズ機能に制限があります。sbtags で生成されたデータベースにより、関数や変数に問い合わせを実行したり、関数呼び出しグラフを表示することができます。
現在、tags データベースには次の制限があります。
ローカル変数に関する問い合わせを発行できない
クラスをブラウズできない
クラスの関係をグラフ化できない
複雑な問い合わせを発行する機能に制限がある
問い合わせをフォーカスする機能に制限がある
コンパイルされた情報よりも信頼性が低い
通常、ファイルが変更された場合には、再度走査して変更をデータベースに取り込む必要はありません。
sbtags データベースは、ソースファイルの字句解析に基づいています。このデータベースは、すべての言語構造を正しく識別するとは限りませんが、コンパイルされないファイルでも動作し、再コンパイルよりも高速に実行されます。
sbtags は、変数、型、関数の定義を認識し、関数呼び出しの情報を収集します。関数呼び出しの情報以外は収集されません。特に、複雑な問い合わせに関する他の意味情報は収集されません。
sbtags の機能は、コールグラファを除き、ctags や etags と類似しており、定義とグラフ化に関するデータベースへの直接の問い合わせと、パターンマッチングによる問い合わせを組み合わせることができます。
sbtag で生成されたデータベースには、次の特徴があります。
クラスブラウザとクラスグラファの機能を使用できない
データベースには、シンボルと文字列に関する情報がすべて格納されているとは限らない。関数、クラス、型、変数の定義、関数呼び出しに関する情報は格納されている
sbtags プログラムはコンパイラよりも高速に動作するため、時間が節約される
データベースのサイズは、ソースコードのサイズよりもずっと小さい
データベースの内容については、意味上の正確さが保証されるとは限らない (sbtags プログラムが実行するのは単純な構文解析と意味解析だけであり、エラーが発生することもあるため)
コードが不完全であるか意味に誤りがあるためにソースコードをコンパイルできなくても、データベースは生成される
sbtags を使用してブラウズデータベースを生成するには、sbtags と入力した後に、生成するデータベースの名前を 1 つ以上指定します。
sbtags file ...