linux core dumpファイルの生成とデバッグ
3042 ワード
1.core dumpファイル生成
新規プロジェクトcoredumptest(1)CMakeList.txtはCMakeListに設定.txtでデバッグ用のコンパイルオプションの詳細なパラメータの意味参照を追加https://blog.csdn.net/rheostat/article/details/19811407
ここで、-gはdebugコンパイルを使用し、-ggdb:実行可能ファイルにGDBで使用可能なデバッグ情報-O 0が含まれていることはコンパイル時に最適化されていないことを示し、すべての最適化オプション-Wallを閉じて大部分の警告メッセージ-fstack-protector-all保護スタック情報を開く-march=nativeを使用すると、GCCはCPUがサポートするコマンドセットを自動的に検出します.-fnon-call-exceptionsで生成されたコードは、不正な浮動小数点演算や不正なメモリアドレスなどのトラップ命令に異常を投げ出すことができ、関連プラットフォームの実行時サポートが必要であり、一般的に有効ではない(2)テスト例
実行時にセグメントエラーが報告されます.(3)coreファイルサイズの設定
システムのデフォルトではcoreファイルは生成されません.ulimit-c xxコマンドを手動で入力してこそcoreファイルが生成されます.
実行./coredumptestは、実行可能プログラムフォルダの下にcoreファイルが生成することを発見する.注意ulimit-c unlimitedは現在のパスでのみ有効であり、パスを変更してulimit-cを入力すると0に見つかります.
2 gdb分析を使用してスタック状況を表示する
入力コマンド
at/home/rootroot/workspace/AProgramtest/coredumptest/main.cpp:6はmainを表す.cppの6行目にエラーが発生しました
3.coredumpファイルを永続的に生成する
マルチスレッドプログラムの一部のエラーは毎回現れるわけではないが、たまに現れるのは難しい.この場合、エラー現場を保存し、ゆっくり分析するのに便利である.coredumpが現れる必要がある場合にcoreファイルを生成して保存することができる.永久的にcoredumpファイルを生成する、/etc/bashrcまたは~/.bashrcファイルにulimit-c unlimitedを追加してコンピュータを再起動し、ulimit-cを入力してunlimitedに出力します
新規プロジェクトcoredumptest(1)CMakeList.txtはCMakeListに設定.txtでデバッグ用のコンパイルオプションの詳細なパラメータの意味参照を追加https://blog.csdn.net/rheostat/article/details/19811407
project(coredumptest)
cmake_minimum_required(VERSION 2.8)
add_compile_options(-std=c++11 -pthread -g -ggdb -O0 -Wall -fstack-protector-all -march=native -fnon-call-exceptions)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
ここで、-gはdebugコンパイルを使用し、-ggdb:実行可能ファイルにGDBで使用可能なデバッグ情報-O 0が含まれていることはコンパイル時に最適化されていないことを示し、すべての最適化オプション-Wallを閉じて大部分の警告メッセージ-fstack-protector-all保護スタック情報を開く-march=nativeを使用すると、GCCはCPUがサポートするコマンドセットを自動的に検出します.-fnon-call-exceptionsで生成されたコードは、不正な浮動小数点演算や不正なメモリアドレスなどのトラップ命令に異常を投げ出すことができ、関連プラットフォームの実行時サポートが必要であり、一般的に有効ではない(2)テスト例
#include
int main()
{
char *ptr="linuxers.cn";
*ptr=0;
}
実行時にセグメントエラーが報告されます.(3)coreファイルサイズの設定
システムのデフォルトではcoreファイルは生成されません.ulimit-c xxコマンドを手動で入力してこそcoreファイルが生成されます.
ulimit -c 1024 core 1024k
ulimit -c unlimited core
実行./coredumptestは、実行可能プログラムフォルダの下にcoreファイルが生成することを発見する.注意ulimit-c unlimitedは現在のパスでのみ有効であり、パスを変更してulimit-cを入力すると0に見つかります.
2 gdb分析を使用してスタック状況を表示する
入力コマンド
gdb ./coredumptest core
は以下のように出力、Reading symbols from ./coredumptest...done.
[New LWP 28151]
Core was generated by `./coredumptest'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00000000004007e0 in main ()
at /home/rootroot/workspace/AProgramtest/coredumptest/main.cpp:6
at/home/rootroot/workspace/AProgramtest/coredumptest/main.cpp:6はmainを表す.cppの6行目にエラーが発生しました
3.coredumpファイルを永続的に生成する
マルチスレッドプログラムの一部のエラーは毎回現れるわけではないが、たまに現れるのは難しい.この場合、エラー現場を保存し、ゆっくり分析するのに便利である.coredumpが現れる必要がある場合にcoreファイルを生成して保存することができる.永久的にcoredumpファイルを生成する、/etc/bashrcまたは~/.bashrcファイルにulimit-c unlimitedを追加してコンピュータを再起動し、ulimit-cを入力してunlimitedに出力します