Solaris pstackが出力/出力形式を読み取る方法

Solaris pstackが出力/出力形式を読み取る方法

pstackコアファイルにSolaris出力があります。セグメントが発生したときに問題の関数で使用されるパラメータにログ内の数値をマップする方法を理解できません。

関数呼び出しの引数の数よりも出力に数が多いようです。パラメータ値/アドレスはどのような数値ですか?

これ手動まったく役に立ちません。

 ...
 fffffffec993a8a8 sigacthandler (b, ffffffff7fffd5e0, ffffffff7fffd300, 14b7b0, fffffffec9a86000, b) + 5c
 --- called from signal handler with signal 11 (SIGSEGV) ---
 fffffffeba4422b0 XmMessageBoxGetChild (100400, 5, 5, 0, 118, fffffffeba62e000) + e4
 000000010026a83c GetMessageDialog (101317440, 0, ffffffff7fffe130, 100420, 100400, 127a94) + 214
 000000010026ab0c _XmtDisplayMessage (101317440, 0, 1000c9510, 1011927e5, ffffffff7fffe240, 101192780) + 278
 000000010026b048 XmtDisplayInformationMsg (1000c9000, 1000c9, 100000, 2, 0, ffffffff7fffe2f8) + 44
 00000001001573ec _smog_w_alarm_post_ack_actions (101314990, 101192760, 1003a0, 1009f4970, 101317440, 100000) + 100
 000000010015819c __select_cb (101314990, ffffffff7fffe560, 101317440, 10113bfc0, 1000916d0, 10120c9d0) + 1b4
 0000000100257a04 XmtCallCallback (101314990, 100257, ffffffff7fffe560, 101183530, 0, 0) + 3c4
 ...

私たちが扱った唯一の2つのアプリケーション機能は、そして__select_cb()残り_smog_w_alarm_post_ack_actions()はMotif GUI /ウィジェットライブラリ呼び出しでした。しかし、関数定義を見てください。

static void __select_cb( Widget w, XtPointer call_data );
void _smog_w_alarm_post_ack_actions( Widget w, Alarm_Public_Data *alarm );

各関数には2つのパラメータしかありません。Widgetポインタの1つが間違っていると予想しました(おそらく閉じたウィンドウを指します。)問題をデバッグするのに役立つように、これらの数値のどれが実際のパラメータ値/アドレスにマップされているかを知りたいです。

答え1

印刷された関数引数は完全なデバッガではないpstackため、「最適な推測」操作であり、pstack()場合によっては、完全なデバッガであっても、完全なデバッグデータがなければ、関数引数の正確な再現を保証することはできません。

Solarispstackコマンドは、以下に基づいています。libproc.so図書館、プロセス制御と情報機能を提供します。バラよりイルモスpstackソースコードユーティリティが次をpstack使用してプロセス呼び出しスタックを取得する方法を学びます。Pstack_iter()機能

~によるとノート部分:

ノート

各フレームのパラメータの数と値、およびすべてのレジスタの値を決定するのはかなり経験的です。したがって、関数に渡されたパラメータregsの値がargc正確であるという保証はありません。argvcall-back()

通常、パラメータが何であるかを推論することが可能です。sigacthandler (b, ...上から見ることができます--- called from signal handler with signal 11 (SIGSEGV) ---。この場合、16進数bは10進数11ですSIGSEGV

のような値は101314990ヒープアドレスであり、同様の値はffffffff7fffe560スタックアドレスです。このユーティリティを使用すると、pmapプロセスのアドレス空間を調べてこれらの値を確認できます。

より確実性が必要な場合は、デバッガ全体を使用し、デバッグシンボルを使用してコンパイルしてください。

関連情報