Railsアプリを書いてる場合はあまり関係ないですが、 セグメンテーションエラー(SEGV)などに遭遇した場合に、 原因を調査する方法を紹介します。 まずは、coreを吐かせるためにulimitの設定をします。
core ファイルを解析するメモ。 下準備 まず意図的に SEGV させるコードを書く。 $ vi a.cpp #include class CPrint { private: int m_number; char *m_str; public: CPrint() : m_number(10), m_str(NULL) {} ~CPrint() {} void print(){ // ここで SEGV る予定 printf( "%d, %c\n", m_number, m_str[0] ); } }; int main() { CPrint p; p.print(); return 0; } 続けて core を出力させる設定。環境は Linux CentOS 5。 $ ulimit -c unlimited core dumped 下準備で作成したソースコードをコンパイル。-g を忘れず
UNIXで実行中のプロセス(≒プログラム)のメモリーダンプをデバッグなどの用途で取りたい場合、UNIX標準の以下のコマンドを使えば取得できます。 gcore -s -c [ダンプの保存先ファイル名] [pid] [ダンプの保存先ファイル名] -- メモリー状態のファイルをどこに出力するか [pid] -- メモリダンプを取りたいプロセスのプロセスID 尚、-sは「プロセスを一時停止し、コアダンプ取得後に再開する」というオプションです。 プロセスID(pid)は 「ps」コマンドで探す /proc/〜 以下を探す /var/run/〜 以下を探す の方法で取得できます。 (多分psコマンドで探すのが人間の一般、プログラムが特定できている場合は/var/run以下で探すのがshell scriptでの一般) ちなみに、psコマンドを叩くと、そのユーザ権限で起動しているプロセスの一覧が表示されま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く