码迷,mamicode.com
首页 > 数据库 > 详细

用gdb+nm调试php c extension程序

时间:2014-07-09 17:04:57      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   strong   文件   width   

.so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了。即使能打印一点儿错误log出来,但也是只见表象,不知内情,根本解决不了一些诡异的bug。还好我们有gdb,下面就 通过4步搞定php c extension的调试。

bubuko.com,布布扣


if test -z "$PHP_DEBUG"; then
    AC_ARG_ENABLE(debug,
    [
        --enable-debug  compile with debugging symbols
    ],[
        PHP_DEBUG=$enableval
    ],[
        PHP_DEBUG=no
    ])
fi

./configure –enable-debug  --enable-yourmodule    //和调试c程序的-g是一样的效果

make                                        //生成带调试信息的.so

make install                             //安装.so到php解释器可以加载的路径

要调试就要设置断点,要设置断点就要知道符号,php扩展中为了保证函数不和c库中的符号重复,在导出函数前都加上统一前缀zif,为了知道待调试.so都有哪些符号,nm命令再合适不过了。nm命令用来列出目标文件(.a或.so)的符号清单,包含函数或类名,如下图:

bubuko.com,布布扣

3.加载php解释器和.so到gdb

是时候加载php解释器到gdb下了,这要用到gdb的file命令:file /usr/bin/php 这里的php解释器不需要有调试符号,但要确保其加载了待调试的.so(可以通过php –m 命令参考)。

(gdb) file ~/php/bin/php

bubuko.com,布布扣

 4.break设置断点,运行php脚本进行调试

都准备就绪了,设置断点吧,用从nm查看到的符号。设置好就run吧: run *.php 这条命令是将.php脚本作为参数传递给php解释器,让php解释器执行*.php脚本,并在断点处停止。然后就list, print, next把bug都找出来吧。

bubuko.com,布布扣

其他的就和调试c程序是一样的步骤了。祝大家调的开心^_^

用gdb+nm调试php c extension程序,布布扣,bubuko.com

用gdb+nm调试php c extension程序

标签:style   http   color   strong   文件   width   

原文地址:http://www.cnblogs.com/breg/p/3831865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!