6

Linux を実行している C++ で、終了時に中止信号を受け取るアプリケーションがあります。コードを調べて問題を突き止める前に、どのような場合にカーネルからアボート シグナルが発生するかを知る必要があります。これにより、デバッグの適切な指示が得られる可能性があります。

アプリケーションがアボート信号を受け取る可能性のあるすべての潜在的なシナリオについて言及してください。

@実行シナリオの詳細は、

  • プロセスは終了モードです。つまり、プロセスを正常にシャットダウンするために exit() ルーチンが呼び出されます。
  • その結果、すべてのグローバル オブジェクト デストラクタが呼び出されます。

ティア

4

3 に答える 3

3
  • -g でコンパイルします。
  • デバッガーから実行する

アプリケーションがクラッシュすると、デバッガーから次の行が表示され、スレッド、変数を検査できます...

その他の解決策:

  • ulimitを使用してコア ダンプの生成を変更する
  • gdb post mortem にコア ダンプをロードする

根本的な原因は複数ある可能性があります: メモリ空間外の読み取り、0 による除算、無効なポインターの逆参照...

于 2011-04-20T05:06:20.810 に答える
1

valgrindの下で実行してみます。アボートと valgrind がそれを認識して通知する前であっても、メモリ エラーが発生する可能性があります。この場合、gdb のような従来のデバッガーよりもはるかに簡単にエラーを見つけることができます。

于 2011-04-20T07:54:47.380 に答える