デーモンとして動作する高トラフィックネットワークCサーバアプリケーションを開発中です。状況によっては、アプリがクラッシュする(常にコアがない)。実行中のデーモンをgdbでデバッグして、SIGSEGVを生成する場所を見つける方法は?gdbを使って実行中のデーモンをデバッグ
注記:
私はプロセスにアタッチした後、コマンドに
を添付して使用して実行中のプロセスにGDBを使用して接続する方法を知って、それが停止します。私が "continue"を実行すると、プログラムがクラッシュしない場合、gdbはブロックされたままです。私がCTRL-Cを押すと、プロセスは終了しており、単にgdbを切り離すことはできません。
そこで質問です:GDBがスタックしているが、プロセスがクラッシュしない場合は取り外しができず、プロセスを継続する方法はありますか?
をあなたが変更しようとしたことがありコアダンプ設定'ulimit'コマンドですか?そして/またはデバッグバージョンを実行していますか?あるいは、クラッシュの可能性のある場所を絞り込むためにログを追加することもできますか? –
私はすべての可能性を試しました。 このプロセスは、Ubuntuサーバー上でupstartサービスとして実行され、サービス開始時に特定のユーザーに設定されます。 limits.confには、そのユーザーのnofileとcoreの両方に無制限の値が含まれています。 私は/etc/sysctl.confにfs.suid_dumpableとkernel.core_uses_pidを設定しました ロギングを追加しましたが、トラフィックの多いサーバーであり、あまりにも多くの出力を生成します。 –