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を見ていてあっと。。。