PHP扩展如何用gdb进行调试

 

扩展编译好用,通过php编码测试报“段错误",如果是c语言都是用gdb进行设置,那php扩展要如何进行调试呢?搜索了下,虽然是php扩展但是core是php 的core不是单个so扩展的coredump
这里使用ulimit -c unlimited来开启core文件,使用gdb来对core文件进行调试演示一下。
 
root@debian:~/php# php a.php 
段错误
root@debian:~/php# ulimit -c unlimited 
root@debian:~/php# php a.php 
段错误 (core dumped)
root@debian:~/php# ls
a.php  core
root@debian:~/php# apt-get install gdb
root@debian:~/php# gdb php -c core 
Core was generated by `php a.php'.
Program terminated with signal 11, Segmentation fault.
#0  0xb6a7bfb8 in zif_smtpmail_connect (ht=5, return_value=0xb6f149dc, return_value_ptr=0x0, this_ptr=0x0, return_value_used=1) at /root/php/php-5.4.7/ext/smtpmail/smtpmail.c:281
281             if(strcmp(substring(lastmessage, 1, 3), hen) !=0 || strlen(lastmessage)==0) {
(gdb) 

(gdb) source ./php-5.4.7/.gdbinit 
(gdb) zbacktrace 
[0xb6efb030] smtpmail_connect("smtp.qq.com", "xxxx", "xxx", "xxxx@qq.com", 25) /root/php/a.php:5 
从上面可以看出报错的是smtpmail.c文件的281行,php调用处是a.php的第5行。
 
参考文章
http://www.laruence.com/2011/06/23/2057.html
http://www.laruence.com/2011/12/06/2381.html
http://tech.ccidnet.com/art/3067/20100207/1996485_1.html

Tags: core , gdb , php扩展

上一篇: Sybase PowerDesigner 15.0 做数据流程图   下一篇: 【转】Lamper知识树

提交疑问

回顶部