ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ Oracle Solaris Studio 12.3 Information Library (日本語) |
pretty-print を使用すると、プログラムで関数呼び出しにより、式の値を独自に整形出力できます。print、rprint、display、または watch コマンドに -p オプションを指定すると、dbx は const chars *db_pretty_print (const T *, int flags, const char *fmt) 形式の関数を検索して呼び出し、出力または表示用の戻り値を変換します。
この関数の flags 引数で渡される値は、次のいずれかのビット単位の論理和です。
|
db_pretty_print() 関数は、静的メンバー関数かスタンドアロン関数に指定できます。
dbx の環境変数 output_pretty_print を on に設定した場合、print、rprint、または display コマンドにデフォルトとして -p が渡されます。この動作を上書きするには、+p を使用します。
次のことも考慮してください。
version 7.6 以前の pretty-print は、prettyprint の ksh 実装に基づいていました。この ksh 関数 (およびその定義済みのエイリアス pp) はまだ存在しますが、その動作の大半は dbx 内に再実装され、次のような結果になりました。
IDE の場合、ウォッチポイント、局所変数、およびバルーン評価で pretty-print を利用できる。
print、display、および watch コマンドの -p オプションでネイティブルートを使用。
特に、ウォッチポイントおよび局所変数に pretty-print を頻繁に呼び出すことができるようになったため、スケーラビリティが向上。
式からアドレスを取得できる機会が増加。
エラー回復処理の向上。
一定/揮発性の非限定型の場合、通常は db_pretty_print(int *, ...() および db_pretty_print(const int *, ...)() などの関数は別個のものとみなされます。dbx の多重定義解決機能では、識別は行いますが、強制はしません。
識別可能。定義した変数が int と const int の両方で宣言されている場合、それぞれが適切な関数にルーティングされます。
強制不可。int または const int 変数が 1 つだけ定義されている場合、それらは両方の関数に一致します。この動作は pretty-print に固有ではなく、すべての呼び出しに適用します。
pretty-print 関数は次のような場合に起動されます。
print -p または dbx 環境変数 output_pretty_print が on に設定されている場合。
display -p または dbx 環境変数 output_pretty_print が on に設定されている場合。
watch -p または dbx 環境変数 output_pretty_print が on に設定されている場合。
dbx 環境変数 output_pretty_print が on に設定されている場合のバルーン評価。
dbx 環境変数 output_pretty_print が on に設定されている場合の局所変数。
pretty-print 関数は次の場合に呼び出されません。
$[].$[] はスクリプトで使用することを意図しており、予測できる必要があるためです。
dump コマンド。dump は、where コマンドと同じ簡単なフォーマットを使用します。これは将来、pretty-print を使用するように変換される可能性があります。この制限は IDE の局所変数ウィンドウには適用されません。
入れ子の値は整形出力されません。dbx には入れ子のフィールドのアドレスを計算するインフラストラクチャーがありません。
db_pretty_print() は -g オプションを使用してコンパイルする必要があります。dbx はパラメータシグニチャーにアクセスする必要があるためです。
db_pretty_print() 関数では NULL を返すことができます。
db_pretty_print() 関数に渡されるメインポインタは NULL 以外であることが保証されていますが、そうでない場合は、完全に初期化されていないオブジェクトを指したままになる可能性があります。
dbx 環境変数 output_pretty_print_fallback はデフォルトで on に設定され、pretty-print が失敗した場合、dbx は標準フォーマットを使用することを意味します。この環境変数が off に設定されている場合、pretty-print が失敗すると dbx はエラーメッセージを発行します。
次のいずれかの理由により、pretty-print が失敗する可能性があります。これらは検出および回復が可能です。
pretty-print 関数が見つからない。
整形出力する式のアドレスを取得できない。
関数呼び出しが直ちに戻らない。これは、不正なオブジェクトが検出されたときに、pretty-print 関数が堅牢でない場合に発生するセグメント例外を示している可能性があります。ユーザーブレークポイントを示している可能性もあります。
pretty-print 関数が NULL を返した。
pretty-print 関数が、dbx が間接参照できないポインタを返した。
コアファイルがデバッグ中である。
前述のような失敗では、関数呼び出しが直ちに戻らない場合を除くすべての状況で、メッセージは表示されず、dbx は標準のフォーマットを使用します。ただし、output_pretty_print_fallback 環境変数が off に設定されている場合、pretty-print が失敗すると、dbx はエラーメッセージを発行します。
ただし、print -p コマンドを、dbx 環境変数 output_pretty_print を on に設定せずに使用した場合、dbx は壊れている関数で停止するため、失敗の原因を診断できます。次に、pop -c コマンドを使用すると、呼び出しを取り消すことができます。
db_pretty_print() 関数は、先頭のパラメータの型に基づいて、明確にする必要があります。C では、関数をファイルスタティックとして記述することで、関数を多重定義できます。