ホームページ >バックエンド開発 >C++ >異なる Linux ディストリビューションで生成されたコア ファイルを正確にデバッグするにはどうすればよいですか?

異なる Linux ディストリビューションで生成されたコア ファイルを正確にデバッグするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-17 06:35:25237ブラウズ

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

異なる 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。