リモートの顧客システムからのコア ファイルのデバッグ
顧客システムからのコア ファイルのデバッグは、特にソフトウェアがデバッグ シンボルなしでコンパイルされている場合に困難になることがあります。この問題に対処するために、このガイドでは、効果的なコア ファイル分析のための洞察とリソースを提供します。
Linux ディストリビューションの互換性
コア ファイルが開発環境とは異なる Linux ディストリビューションから生成される場合、スタック トレースは意味がないかもしれない。これは、GDB が共有ライブラリのローカル コピー内の関数アドレスを検索し、顧客のシステム上の関数アドレスとは異なる可能性があるためです。正確なスタック トレースを取得するには、顧客の共有ライブラリのコピーを取得し、(gdb) set solib-absolute-prefix /path/to/libraries.
Linux および Solaris のデバッグに関する推奨書籍
Linux および Solaris の高度なデバッグについては、以下を考慮してください。書籍:
「The Practice of System and Network Administration」Thomas Limoncelli、Christina Hogan、Strata R. Chalup 著- 「Debugging with GDB: The GNU Source-Level Debugger」 Richard Stallman と Roland H. Pesch 著
- 「Solaris パフォーマンスとRichard W. Jardine および Gildas C. Cator 著
-
これらの書籍では、実際のデバッグ シナリオ、高度なテクニック、アセンブリ レベルのデバッグ ガイダンスが提供されています。
サンプル クラッシュの分析
次の例を考えてみましょうcrash:
Program terminated with signal 11, Segmentation fault.
#0 0xffffe410 in __kernel_vsyscall ()
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x00454ff1 in select () from /lib/libc.so.6
...
<omitted frames>
ログイン後にコピー
意味のあるスタック トレースを得るには、お客様のシステムから libc.so.6 ライブラリを取得し、GDB にプレフィックス パスを設定します。次に、(gdb) where コマンドを発行して、修正されたスタックを表示します。
デバッグ可能なバイナリを配布する代替アプローチ
-g バイナリを顧客に配布する代わりに、次のアプローチを検討してください。
-g と -O2 の両方を指定してコンパイルし、デバッグ可能なバイナリを次のように出力します。 myexe.dbg.- デバッグ シンボルを削除して myexe を作成します。
- myexe を顧客に配布します。
- 顧客からのコア ファイルのデバッグには myexe.dbg を使用します。
-
このメソッドは、ソースの詳細を公開したり、ファイルを送信したりせずに、デバッグ用のシンボリック情報を提供します。個別のデバッグ可能なバイナリ。
以上が異なる Linux ディストリビューションを使用して、リモートの顧客システムからコア ファイルを効果的にデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。