Solaris 2.x への移行

デバッガ

この節ではデバッグツールの変更について説明します。

dbxdbxtool

dbxdbxtool は、デフォルトのシステムソフトウェアには含まれません。アンバンドル製品の Sun WorkShop には、これらの改良版が含まれています。

adbkadb

adbkadb は、Solaris 2.6 オペレーティングシステムにバンドルされていて、SunOS 4.x のツールと同じ機能を提供します。kadb はマルチプロセッサで使用できるよう改良されました。kadb のプロンプトにはプロセッサ ID が表示されます。以下の例では、プロセッサ ID が 0 になっています。

Solaris 2.6 環境で容易にカーネルのデバッグを行うには、次のようにします。

kadb マクロ

以下の kadb マクロは、マルチスレッドカーネルといっしょに使用すると特に有効です。

現在のスレッドを表示します。現在のスレッドポインタは、SPARC グローバルレジスタ g7 です。

kadb[0]: <g7$<thread

threadlist は、システム内のすべてのカーネルスレッドのスタックトレースを表示します。このリストは非常に長くなることがあります。

kadb[0]: $<threadlist

mutex は、所有スレッドのアドレスを表示します。この例では、グローバルで危険なドライバ mutex を使用しています。

kadb[0]: unsafe_driver$<mutex

kadb[0]: moddebug/W 0x80000000

moddebug は、モジュールのロードを監視できるようにします。デバッグ専用に使用する moddebugの有効な値については、<sys/modctl.h> の最後を参照してください。

動作中のカーネルのデバッグ

稼働中のカーネルをデバッグするには、次のコマンドを使用します。

# adb -k /dev/ksyms /dev/mem

/dev/ksyms は、稼働中のカーネルの完全な名前を含む擬似デバイスです。

truss コマンド

truss は、実行したシステムコール、受信シグナル、ハードウェア障害などを追跡するために開発された新しいユーティリティです。truss には、SunOS 4.x の trace(1) コマンドにはなかった、フォークされたプロセスの追跡機能やマルチスレッドプロセスの処理機能を含む重要な機能がいくつか追加されています。

次の例は、date コマンドの追跡結果を要約したものです。-c オプションを指定すると、truss は行単位の追跡を表示せず、システムコール、シグナル、フォルトの回数をカウントして、その合計を表示します。

example% truss -c date
Fri Sep 18 14:31:30 PDT 1992
syscall      seconds   calls  errors
_exit            .00       1
read             .00       7
write            .00       1
open             .03      12
close            .00      12
time             .00       1
brk              .01       4
lseek            .00       1
fstat            .00       4
ioctl            .00       1
execve           .00       1
mmap             .01      17
munmap           .00       8
                ----     ---    ---
sys totals:      .05      70      0
usr time:        .03
elapsed:         .28

truss オプションの詳細については、truss(1) のマニュアル・ページを参照してください。Solaris 2.6 ではこの他に pmap(1) のような proc(4) を基本としたデバッグツールが数多く用意されています。