日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
STACK(9) FreeBSD カーネル開発者マニュアル STACK(9) 名称 stack -- カーネルスレッドスタックトレースルーチン 書式 #include <sys/param.h> #include <sys/stack.h> カーネル設定ファイルで: options DDB options STACK struct stack * stack_create(void); void stack_destroy(struct stack *st); int stack_put(struct stack *st, vm_offset_t pc); void stack_copy(const struct stack *src, struct stack dst); void stack_zero(struct stack *st); void stack_print(const struct stack *st); void stack_print_ddb(const struct stack *st); void stack_print_short(const struct stack *st); void stack_print_short_ddb(const struct stack *st); void stack_sbuf_print(struct sbuf sb*, const struct stack *st); void stack_sbuf_print_ddb(struct sbuf sb*, const struct stack *st); void stack_save(struct stack *st); void stack_save_td(struct stack *st, struct thread *td); int stack_save_td_running(struct stack *st, struct thread *td); 解説 stack KPI によって、デバッグとトレース目的のためにカーネルスタックトレー ス情報の問い合わせができ、カーネルスタックトレース文字列の自動的な生成が できます。KPI を使用するためには、少なくとも options DDB と options STACK の 1 つをカーネルにコンパイルしなければなりません。 各スタックトレースは、struct stack によって記述されます。トレースを作成す るか、または別の方法で操作される前に、トレースのための記憶域は、スリープ するかもしれない stack_create() で割り付けられなければなりません。トレー スに関連しているメモリは、stack_destroy() を呼び出すことによって解放され ます。 現在のカーネルスレッドの呼び出しスタックのトレースは、stack_save() を使用 して捕獲されます。また、stack_save_td() と stack_save_td_running() は、呼 び出し側特有のスレッドのスタックを捕獲するために使用されます。これらの関 数の呼び出し側は、指定されたスレッドのスレッドのロックを所有していなけれ ばなりません。stack_save_td() は、呼び出しの時に実行していないか、または スワップアウトしているカーネルスレッドのスタックを捕獲することができま す。stack_save_td_running() は、実行しているカーネルスレッドのスタックは 捕獲することができます。 stack_print() と stack_print_short() は、カーネル printf(9) を使用してス タックトレースを印刷するために使用され、シンボル名を検索している間に、 カーネルリンカで sx(9) ロックの獲得の結果としてスリープするかもしれませ ん。ロックに敏感な環境で、非同期化された stack_print_ddb() と stack_print_short_ddb() 変異型が、呼び出されるかもしれません。この関数 は、カーネルリンカロックを迂回し、それを ddb(4) で使用可能にしますが、リ ンカデータ構造が変化するところで動作中のシステムは、そうしません。 stack_sbuf_print() は、単純なカーネル命令ポインタから指定されたシンボルと オフセットまでの (可能であれば) 変換を含んで、人間に読み込み可能な文字列 を構成するために使用されます。引数 sb は、sbuf(9) で説明されるように初期 化されている struct sbuf でなければなりません。この関数は、自動拡張の struct sbuf が使用されるなら、またはカーネルリンカロックのためにスリープ するかもしれません。ddb(4) のような、ロックに敏感な環境で、非同期化された stack_sbuf_print_ddb() 変異型が、カーネルリンカロックを避けるために呼び出 されるかもしれません。それは、固定長の sbuf で使用されるべきです。 ユーティリティ関数 stack_zero, stack_copy と stack_put は、直接スタック データ構造を操作するために使用されます。 戻り値 stack_put() は、成功すれば、0 を返します。そうでなければ、struct stack は、追加のフレームを記録するために、空間を含まず、0 以外の値が返されま す。 stack_save_td_running() は、スタックの捕獲が成功したとき、0 を返し、そう でなければ、0 でないのエラー番号か返されます。特に、スレッドがキャプチャ が試みられた時点でユーザモードで実行していたなら、EAGAIN が返され、操作が 実装されていないなら、EOPNOTSUPP が返されます。 関連項目 ddb(4), printf(9), sbuf(9), sx(9) 作者 stack 関数一式は、Antoine Brodin によって作成されました。stack は、ddb(4) の外で汎用の使用のために Robert Watson によって拡張されました。 FreeBSD 11.4 September 10, 2015 FreeBSD 11.4