1. ホーム
  2. リナックス

Linux が中止された(コアがダンプされた)。

2022-02-23 10:05:17
<パス

1. 問題の説明


またはその外観。

2. コアダンプの解析について

2.1 Core Dumpとは

  • コアとは Memory ダンプとは Throw out, heap out . プログラムを開発(使用)していると、時々、何の表示もなく(コアダンプされたと表示されることもある)、プログラムがなぜかダウンしてしまうことがある。システムは正常でも、次回に同じ問題に遭遇することがあります。このようなときは、次のようなコードがあるかどうかを確認するのがよいでしょう。 core.PID このファイルは、OSがダウンしたときに、プログラムのメモリ内容を捨てて、我々やデバッガが参照できるようにするために生成されるものです。この動作をコアダンプと呼びます。
  • core dump is also called a core dump, where the operating system stores the current memory state of a program in a core file when an exception occurs during the program's runtime and the program exits abnormally, called a core dump プロセスが異常終了すると、プロセスユーザ空間のデータがディスクに書き込まれる .

2.2 プログラムがダウンしているのにCoreファイルが生成されないことがあるのはなぜですか?

  • プログラムがダウンしたとき、コンパイルエラーのようにファイル行にプロンプトが表示されるのではなく、何も情報がないことがあります。ひとつの方法として、gdbのステップ( The linux debugging tool gdb is a very powerful debugger )を、一歩一歩探していくのですが、何万行もあるコードを一歩一歩探していくのは想像に難くありません。もっといい方法があるはずで、それがコアファイルです。
  • しかし、コア・ファイルは生成されない、なぜなら core.PID コアファイルは、現在のシステムの環境設定で生成されるため、デフォルトのコアファイルのサイズは0です( Note the line core file size (blocks, -c) 0, which indicates the length (in bytes, the size of a block depends on the system) assigned to the core file. )
  • 次に、ulimit コマンドでコアファイルのサイズを表示、変更するために ulimit -a サイズを表示するには ulimit -c unlimited はコアファイルの制限なし、または ulimit -c 1024 を指定すると、コアファイルに1024バイトが割り当てられます。
  • その後、再度プログラムを実行すると core.PID コアファイル( コアファイルは通常、実行中のアプリケーションのパスと同じ場所に生成され、ファイル名は通常 core.process となります。 ).

2.3 coreファイルの使い方を教えてください。

コアダンプが発生した後、gdbを使用してコアファイルの内容を表示し、コアダンプのトリガーとなったファイルの行を探します。Linuxでは、コアファイルのエラースタック情報を見るには、次の2つの方法があります。 gdb -c core.pid program_name または gdb [program_name] [core.pid] gdbモードは以下のように入力することができます。

  • gdbを入力した後 where と入力すると、どの行で、どの関数内で、誰によって呼ばれたのか、などを示すことができます。
  • gdbを入力した後にbtと入力し、btコマンドでバックトレースを見て、プログラムの実行がどこで発生したかを確認し、コアダンプのfile->行を探します。

3、複数の例

3.1 batch_size が大きすぎる原因

中止(コアダンプ)

3.2 あるスレッドが殺害され、殺害されたスレッドが例外をスローする場合

キャンセル & C++例外

3.3 アクティブな例外処理なしに呼び出される純粋な仮想メソッドの終了について

マルチスレッドプログラムの場合、このエラーの主な原因は、現在のオブジェクトが破壊されたか、破壊される途中であるにもかかわらず、再び呼び出され、競合が発生することです。

3.4 という純粋な仮想メソッドです。

マルチスレッドプログラムの作成中に発生したランタイムエラーを記録:純粋な仮想メソッドの呼び出し

マルチスレッドのベースクラスに純粋仮想関数runを書き、サブクラスがrun関数を継承している、注目は純粋仮想関数、ベースクラス構築時にスレッドを作成し、run関数を直接実行させた、サブクラスはまだ構築されていなかったので、この時点ではまだ純粋仮想関数、純粋仮想メソッドはエラーを呼んで終了、ありがとうございます http://bbs.csdn.net/topics/340224117这个帖子里的大神们

参考1. コアダンプとは?
参考2. セグメンテーションフォールト(コアダンプ)の解決方法
参考3. Segmentation fault (core dumped)についての素朴な疑問。
参考4. コアファイルについて
参考5. ubuntu view core dumped detail エラー原因