質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

436閲覧

GDBコマンドの使い方について

pacokio

総合スコア18

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/12/04 11:55

GDBコマンドを用いてcoredumpファイルの解析を行いたいと思っています。

◆背景
現在CentOS6、PHP5.2、Apache2.4.29等の環境です。
最近Apache2.2系からアップグレードを行ったところ、
Apacheのerror_logにて、
Segmantation fault が多発しており、原因を探りたいと
調査していたところで、コアダンプの取得にたどり着きました。
コアダンプの取得は出来たのですが、
GDBコマンドの使い方は我流となっているため、
有識者の方にアドバイスを頂ければと思っています。

◆入力コマンド
gdb httpd <コアダンプファイル>

◆出力内容の後半部分
Reading symbols from /usr/lib/libxml2.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libxml2.so.2
Reading symbols from /usr/local/php-5.2.5/lib/php/extensions/no-debug-zts-20060613/curl.so...done.
Loaded symbols for /usr/local/php-5.2.5/lib/php/extensions/no-debug-zts-20060613/curl.so
Reading symbols from /usr/local/lib/libcurl.so.4...(no debugging symbols found)...done.
Loaded symbols for /usr/local/lib/libcurl.so.4
Reading symbols from /usr/local/php-5.2.5/lib/php/extensions/no-debug-zts-20060613/apc.so...done.
Loaded symbols for /usr/local/php-5.2.5/lib/php/extensions/no-debug-zts-20060613/apc.so
Core was generated by `/usr/local/apache2/bin/httpd -k start'.
Program terminated with signal 11, Segmentation fault.
'#0 0x0962d978 in zend_str_tolower_dup (execute_data=0xbf1e30d0, tsrm_ls=0xa0043b0) at /usr/local/src/php-5.2.17/Zend/zend_operators.h:287
287 return zend_str_tolower_copy((char *)emalloc(length+1), source, length);

◆質問(以下の理解で正しいでしょうか?違う場合、ご教授願います。)
①上記はhttpdを実行した際に、読み込んでいるmoduleが順に読み込まれ(Reaing)、ロードされている(Loaded)と認識しています。
②異常を示しているのは、「Core was generated by~」の上の行のapc.soのロードで異常が起きているという認識です。
③#0以降の文章が、エラーの詳細だと思っています。原因のファイルが「zend_operators.h」であり、return以降がその行の内容を表示していると思っています。
(※理解が正しいとなると、なぜ、/usr/local/src/以下のファイルを読みに行っているのかが分からない状態です。)

以上になります。
GDBコマンド出力結果の読み方が正しいかを教授願います。
※については、アドバイス頂けるようであればお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

②異常を示しているのは、「Core was generated by~」の上の行のapc.soのロードで異常が起きているという認識です。

いえ、apc.so のロードで異常が起きているわけではありません。Loadを行っているのはgdbであり、httpd ではありません。Loaded は apc.so のシンボルが正常に読み込まれたことを意味しています。

③#0以降の文章が、エラーの詳細だと思っています。原因のファイルが「zend_operators.h」であり、return以降がその行の内容を表示していると思っています。

その通りです。

zend_str_tolower_copy((char *)emalloc(length+1), source, length);

このコーディングがちょっとやくざで、emalloc の返り値を検査してません。malloc 系はメモリが足りない場合は 0 つまり null を返すのですが、null チェックをしていないので、 length+1 に対して充分なメモリがない場合に 0番地に書き込もうとして Segmentation fault で落ちるものと思われます。メモリが足りなくなる原因はいろいろありますが、この場合、関数名から文字列をコピーしようとしていると推測されるので、 length とか source の値を gdb で確認されてみてはいかがでしょうか。

投稿2017/12/05 10:13

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pacokio

2017/12/12 11:54

ご回答誠にありがとうございます。 そしてお返事が遅くなりまして申し訳ありませんでした。 内容の方は確認させて頂き、②、③の回答(指摘)は理解しました。 length、source の値は確認させて頂きました。 (gdb) p length $1 = 4 (gdb) p source $2 = 0xb7413360 "test" 上記よりNULLではなく何らかの値を持っているようである事は確認したのですが、 PHPのソースファイルの仕様(やくざ)となると、当方サーバエンジニアの為、 ソースファイルの修正、プログラム修正での対応が難しいため、 Apache、APCの方に目を向けて調査を進めてみようと思います。(現在実行中です。) 解決に至れたら、また追記させて頂こうと思います。 GDBコマンドの使い方、とても参考になりました。 また情報提供が少ない中アドバイス頂き誠にありがとうございました。 また、ご縁がありましたら宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問