C++プログラムがFreeBSD 6.2でクラッシュし、OSがコアダンプを作成するのに十分親切でした。いくつかのスタックフレームを切断し、命令ポインタをリセットし、gdbのプロセスを再起動することは可能ですか?クラッシュからコアダンプで復旧する
答えて
はい、gdbは実行中のプログラムだけでなくコアダンプもデバッグできます。 (
gdb a.out a.core
そして、あなたはどのような方法で実行を継続することはできませんを除いて、あなたは、通常のようにデバッグすることができます:a.out
はあなたのプログラムの実行可能ファイルの名前で、a.core
は、あなたのコアファイルの名前なので、同じようにgdbを呼び出すことと仮定すると、たとえできても、プログラムはちょうど再びクラッシュするでしょう)。スタックトレース、レジスタ、メモリなどを調べることができます。
いくつかのスタックフレームを切断し、命令ポインタをリセットしてgdbでプロセスを再起動できますか?
私は、プロセスの状態を変更し、再度実行を開始するように設定しています(あたかも最初の場所でクラッシュしないかのように)。
いいえ、GDB(魔法のようにこの能力を持っていれば)があなたのファイルディスクリプタ(プロセスが亡くなったときに自動的に閉じたもの)をどのように処理するのですか?
GDBが関数を呼び出して変数を割り当てる能力があると誤解されていないならば、少なくとも理論的にはプロセスが再開する時点でファイル記述子を復活させることは可能です。 – Droopov
"機能を呼び出す能力を持っている" - あなたが "生きている"劣ったプロセスを持っている場合のみコアをデバッグするとき、GDBは "ファイル記述子を復活させる"ことはできません。また、ファイルオフセットはカーネルによってのみ維持されるので、GDBはそれらを復元する方法がありません。 –
本の可能性のある重複:Best practices for recovering from a segmentation fault
概要:それは可能ですが、お勧めできません。それを行う方法は、シグナルハンドラからsetjmp()とlongjmp()を使用することです。 (完全なソースコードの例を重複したポストで見てください。
- 1. Apache Camel - JVMクラッシュから復旧する
- 2. "NetworkNotFound"でnova-computeクラッシュから復旧するには?
- 3. サンドボックスからのデータ復旧
- 4. GitHub Desktopから復旧する
- 5. System.Management.ManagementEventWatcher - 切断から復旧する
- 6. mysql:frmファイルからデータベースを復旧する
- 7. HTTP I/Oエラーから復旧する
- 8. WinFormsでのメモリリーククラッシュからの復旧
- 9. スタックオーバーフローから復旧できない
- 10. 例外復旧後の復旧
- 11. Servceファブリックステートフルサービス - 破損からの復旧
- 12. git rebaseから復旧しました
- 13. AccessデータベースファイルからVBAコードを復旧
- 14. git push -fからの復旧方法?
- 15. Apache Cassandra CommitLogReplayExceptionからの復旧方法
- 16. gitサーバのローカルリポジトリからの復旧
- 17. ClojureScript REPLのエラーからの復旧
- 18. Apache Spark:チェックポイントから復旧中のNPE
- 19. Azure SQLデータベースのフェールオーバーからの復旧
- 20. バーチャルボックスのスナップショットからの復旧
- 21. Tomcatデータソース復旧
- 22. バイナリツリーの復旧
- 23. 別のアクティビティでRadioGroupからデータを復旧する方法は?
- 24. rebaseで停止プルから復旧する方法
- 25. カスタムポストタイプデータを復旧する
- 26. .un〜ファイルから復旧コマンドなしでvimファイルを回復する
- 27. ホストから復旧できない可能性のあるプレイブック
- 28. インストールされているアプリからAndroidプロジェクトを復旧する
- 29. InnoDBデータベースの復旧
- 30. mongodbデータベース復旧スクリプト
GDBは "プログラムを実行するだけでなく"コアダンプをデバッグしません。http://yosefk.com/blog/を参照してください。非常に面白い-gdb-ve-ery-funny.html – ACyclic