Solarisでコアダンプファイルを分析するためにpstackを使用しています
Solarisからのコアダンプを他にどのように分析できますか?
これを行うためにどのコマンドを使用できますか?
ダンプから他にどのような情報が利用可能になりますか?
Solarisモジュラーデバッガー、mdb、またはdbxを使用できます。 mdbには、SUNWmdb(または64ビットバージョンの場合はSUNWmdb x)パッケージが付属しています。
コアファイルは、クラッシュした時点で実行中のプロセスのイメージです。
アプリケーションがデバッグフラグを使用してコンパイルされているかどうかに応じて、スタックのイメージを表示できるため、どの関数がコアを引き起こしたかを知り、その関数に渡されたパラメーターの値、つまり値を取得できます。変数の、割り当てられたメモリゾーン.。
最近のSolarisバージョンでは、coreadmコマンドを使用してコアファイルに含まれる内容を構成できます。たとえば、プロセスがアタッチされたマップされたメモリセグメントを持つことができます。
MDBドキュメント および dbxドキュメント を参照してください。 GDBクイックリファレンス カードは、GDBの基本を理解したら役に立ちます。
コアダンプが作成または構築したプログラムからのものである場合は、実行中のアプリケーションのデバッグに通常使用するデバッガーを使用します。それらはすべてコアファイルをロードできるはずです。デバッガーにこだわりがなく、Solarisを使用している場合は、dbxをお勧めします。パッチを適用した最新のFCSバージョンのSunStudio、または最新のExpressバージョンのSunStudioを入手するのに役立ちます。コアファイルが作成されたのと同じシステム上のデバッガーにコアファイルをロードできると、非常に役立ちます。ライブラリ内のコードがコアファイルが作成されたときと異なる場合、スタックトレースはライブラリを通過するときに役に立ちません。デバッガーは、libthreadとランタイムリンカーのデータ構造を理解するためにOSヘルパーライブラリも使用するため、コアファイルを別のマシンにロードする必要がある場合は、OSにインストールされているヘルパーライブラリがのシステムデータ構造と一致することを確認する必要があります。 OS。数年前に書かれたホワイトペーパーで、これらのシステムライブラリについて知りたくなかったすべてのことを見つけることができます。
http://developers.Sun.com/solaris/articles/DebugLibraries/DebugLibraries_content.html
この質問への答えは、簡単なレシピから始める必要があると思います。
Dbxの場合、レシピは次のとおりです。
% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where
私の意見では、ネイティブのSolarisデバッガーよりも基本的なタスクを学ぶ方が簡単なので、最初にgdbを試すことをお勧めします。
Solarisx86ボックスでdbxを見つけました。
/opt/SUNWspro/bin/dbx
乾杯!
GDBを使用できます。
ダンプの前に試行された呼び出しを行うことができます。
http://en.wikipedia.org/wiki/GDB
ソースがあることは素晴らしいことであり、これを使用してデバッグできるため、エラーをさらに適切に再現できる場合。
過去に私にとって素晴らしい仕事をしました。
pflagsコマンドは、各スレッドがコアダンプされたときの状態を判別するのにも役立ちます。このようにして、問題を特定できることがよくあります。