異なる Linux ディストリビューション間でのコア ファイルのデバッグ
開発環境とは異なる Linux ディストリビューションでコア ファイルが生成されると、スタック トレースまったく意味がないかもしれません。動的にリンクされた実行可能ファイルは共有ライブラリ内のアドレスに依存しており、これらのアドレスはディストリビューションごとに異なる場合があります。 GDB は、クラッシュの原因がライブラリのコピー内の関数であると誤って判断する可能性がありますが、顧客のシステムには同じアドレスに別の関数がある可能性があります。
スタック トレースの精度を検証するには、問題の関数を逆アセンブルする必要がある可能性があります。アドレスが命令内にあるか、またはその前に非 CALL 命令があることがわかります。このような場合、スタック トレースは信頼できません。
より正確なトレースを取得するには、問題のあるバイナリで使用される次のライブラリを提供するよう顧客に要求できます。
cd / tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...
システム:
mkdir /tmp/from-customer tar xzf to-you.tar.gz -C /tmp/from-customer gdb /path/to/binary (gdb) set solib-absolute-prefix /tmp/from-customer (gdb) core core # Important: Set solib-... before loading core (gdb) where # Get meaningful stack trace!
最適化されたデバッグバイナリ
お客様に -g バイナリを実行するようアドバイスする代わりに、-g と -O2 の両方の最適化フラグを使用してバイナリを構築し、配布前にデバッグ情報を削除することをお勧めします。
build with -g -O2 -o myexe.dbg strip -g myexe.dbg -o myexe distribute myexe to customers when a customer gets a core, use myexe.dbg to debug it
これにより、機密ソース コードを共有することなく、完全なシンボリック デバッグ (ファイル/行、ローカル変数) が可能になります詳細。
以上が異なる Linux ディストリビューションで生成されたコア ファイルを正確にデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。