PHP拡張 EXCEPTIONでcoreをはいたとき。。。
PHP拡張機能の開発をしていて、情報があまりに少なくつまずいた箇所その1です。
状況
・PHP拡張機能にてエクセプションを利用
・コンパイル後、実行すると不定期にcoreダンプで落ちる。
※特にapache経由での実行ではほぼ100%
原因
・zend_exception.hのインクルード漏れ
コンパイル中にもワーニングが出ていたんですが、
・スケルトンツールで作ったmakeファイルの出力が多かった
・テストスクリプトがなんとなく動いてた
為見逃していました。。。
ワーニングメッセージをちゃんと読んでたら怪しいとわかったはずなのに。。。
警告: passing argument 2 of ‘zend_register_internal_class_ex’ makes pointer from integer without a cast
結局はgdbでcoreを解析。
問題解決に至りました。
解決のネタになったバックトレースは以下です。
zend_register_internal_class_ex( &tmpExp_ce,zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC)
zend_error(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ce->name, parent_ce->name);
これを見て、結局zend*.hをいろいろのぞいたり*.cを見ていてあっと。。。