カーネルデバッガに関する注意事項について説明します。
x86 プラットフォーム上の Solaris 10 OS で、シグナルハンドラを持つシグナルを発生または送信するプログラムのデバッグに dbx デバッガが使用されている場合、dbx が予期しない SIGTRAP シグナルをカーネルから受信して、デバッガがハングアップすることがあります。この状況は、dbx がシングルステップ実行、ブレークポイントに対する実行、実行時チェック (RTC) データの収集など、シグナルのトラップに依存する動作を行なっているときに発生することがあります。
場合によっては、dbx は予期しない SIGTRAP シグナルの警告をハングアップ時に表示することがあります。次に例を示します。
dbx: internal warning: unexpected SIGTRAP! |
その他の場合、dbx は SEGV シグナルが受信されたことを示します。次に例を示します。
signal SEGV (no mapping at the fault address) in main at line 29 in file "test.c" |
この場合、ユーザーが cont -sig SEGV コマンドを入力して SEGV シグナルでの実行を継続させると、dbx は予期しない SIGTRAP の警告を表示します。
このバグは、x86 プラットフォーム上の Solaris 10 OS にカーネルパッチ 127112 がインストールされると発生するようになります。
回避方法: カーネルパッチ 127112 をインストールしないでください。すでにインストールされている場合は、このカーネルパッチをアンインストールしてください。このバグについての詳細は、http://developers.sun.com/sunstudio/support/news/index.jsp の Sun Studio Support News のページを参照してください。
一部の 64 ビット実行可能ファイルおよび 64 ビットライブラリの処理中に、dbx デバッガがメモリーアクセスエラーで終了することがあります。ただし、これらの 64 ビットオブジェクトの通常の使用には影響ありません。次のようなエラーメッセージが表示されます。
dbx: internal error: signal SIGBUS (invalid address alignment) |
回避方法: 代わりに、mdb デバッガまたは Solaris 動的トレース機能を使用してください。これらのツールには、64 ビットオブジェクトを使用するプロセスを診断する機能があります。
Solaris カーネルデバッガを実行して稼働中のシステムをデバッグしているシステムは、不完全なエラーメッセージのループになることがあります。このループは、OpenBoot PROM のマスターCPU を変更したときに発生します。リセットすればシステムを稼働状態に戻すことができます。しかし、元のエラーのトレースログが失われます。したがって、重大なリセットの診断が実行不能になります。
回避方法: システムが PROM レベルにあるときは、OpenBoot の ok プロンプトが表示されます。複数の CPU を備えたシステムでは、ok プロンプトの前に中括弧で囲まれた数値が表示されます。この数値は、システム内のアクティブになっている CPU を示しています。PROM レベル時にデバッグセッションを実行するには、次の手順を実行します。
次のコマンドを入力して、pil を f に変更します。
{0} ok h# 0f pil! |
switch-cpu コマンドを使用して、選択的に現在アクティブになっている CPU を別の CPU に切り替えます。たとえば、CPU #0 から CPU #1 に切り替えるには、次のコマンドを入力します。
(0) ok 1 switch-cpu |
これで、ok プロンプトの前に、切り替えた CPU の番号が表示されます。
{1} ok |
デバッガを実行します。
デバッガセッションの終わりで、reset-all コマンドを実行してシステムを通常の使用状態に戻します。
必ずシステムを最新バージョンの OpenBoot PROM にアップグレードしてください。