お客様のボックスでソフトウェアを実行することにより、コア ファイルを取得します。残念ながら、デバッグ シンボルを使用せずに常に -O2 でコンパイルしてきたため、クラッシュの原因を突き止めることができない状況が発生しました。ビルドを変更して、-g と -O2 を一緒に生成するようにしました。次に、デバッグを容易にするために -g バイナリを実行するようお客様にアドバイスします。
いくつかの質問を聞きたいんです:
- Dev で実行している Linux ディストリビューション以外の Linux ディストリビューションからコア ファイルが生成されるとどうなりますか? スタックトレースは意味がありますか?
- Linux や Solaris でのデバッグに役立つ書籍はありますか? 例指向の何かは素晴らしいでしょう。ルーチンがクラッシュした理由と、著者がどのように解決策にたどり着いたかを理解するための実際の例を探しています。私はこれをしばらくやっているので、中級から上級レベルの何かが良いでしょう. いくつかのアセンブリも同様に良いでしょう。
これは、お客様に -g ver. を入手するように伝える必要があるクラッシュの例です。バイナリの:
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>
理想的には、アプリがクラッシュした正確な理由を解決したいと考えています。メモリの破損が原因であると思われますが、100% 確実ではありません。
リモート デバッグは厳密に許可されていません。
ありがとう