from:http://rdc.taobao.com/blog/cs/?p=1235
最近在写Beanstalkd的php c extension客户端程序,写程序离不开调试,下面把调试中碰到的问题和解决方法和大家分享一下。
.so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了。即使能打印一点儿错误log出来,但也是只见表象,不知内情,根本解决不了一些诡异的bug。还好我们有gdb,下面就通过4步搞定php c extension的调试。
1.准备可调试的.so
在config.m4中加上下面的配置信息
./configure –enable-debug //和调试c程序的-g是一样的效果
make //生成带调试信息的.so
make install //安装.so到php解释器可以加载的路径
2.通过nm查看
要调试就要设置断点,要设置断点就要知道符号,php扩展中为了保证函数不和c库中的符号重复,在导出函数前都加上统一前缀zif,为了知道待调试.so都有哪些符号,nm命令再合适不过了。nm命令用来列出目标文件(.a或.so)的符号清单,包含函数或类名,如下图:
3.加载php解释器和.so到gdb
是时候加载php解释器到gdb下了,这要用到gdb的file命令:file /usr/bin/php这里的php解释器不需要有调试符号,但要确保其加载了待调试的.so(可以通过php –m 命令参考)。
4.break设置断点,运行php脚本进行调试
都准备就绪了,设置断点吧,用从nm查看到的符号。设置好就run吧:run *.php这条命令是将.php脚本作为参数传递给php解释器,让php解释器执行*.php脚本,并在断点处停止。然后就list, print, next把bug都找出来吧。
设置断点时一定要选择y,因为断点是设置在扩展so里面,必须load之后才能才能找到。
其他的就和调试c程序是一样的步骤了。祝大家调的开心^_^
分享到:
相关推荐
gdb + UML调试linux内核,自己总结的,非常实用,有需要的采纳,根文件系统可以到我的资源下载!
gdb+gdbserver调试使用手册+嵌入式开发+手册
gdb+UML调试linux内核步骤,里面记录了我在使用gdbt调试linux内核源码的详细步骤。
基于A33的GDB+KGDB内核调试环境搭建,此种是以串口方法进行搭建kgdb调试环境的,如果通过网络的话,需要使用到其他的模块
【摘要】:本文首先介绍了gdb+gdbserver相关的概念,然后...接着介绍了利用gdb+gdbserver调试应用程序的流程及实例等;最后分析了下gdb+gdbserver安装过程中的常见问题。 <br>【关键词】:gdb,gdbserver,远程调试
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机...
用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序
Eclipse+CDT+GDB调试android NDK程序
Eclipse+CDT+GDB调试android_NDK程序
GDB+GDBserver使用详解(GDB脚本编写) GDB+GDBserver使用详解(GDB脚本编写) GDB+GDBserver使用详解(GDB脚本编写) GDB+GDBserver使用详解(GDB脚本编写) GDB+GDBserver使用详解(GDB脚本编写)
适用于 使用gdbserver + adb转发 + gdb在windows中调试 文
这些书籍涵盖了从vi,emacs(编辑器), gcc(编译器), make(工程项目管理), gdb(调试),bash(使用最广泛的shell)等unix环境下开发所需的大部分工具的基本使用和高级功能等.基本上是某方面最经典最权威的著作.(还有一本是...
这些书籍涵盖了从vi,emacs(编辑器), gcc(编译器), make(工程项目管理), gdb(调试),bash(使用最广泛的shell)等unix环境下开发所需的大部分工具的基本使用和高级功能等.基本上是某方面最经典最权威的著作.(还有一本是...
GDB调试GDB调试GDB调试GDB调试GDB调试 GDB调试GDB调试GDB调试GDB调试GDB调试
ddd+gdb调试程序,ddd很强大,分析代码,个人觉得比insight好用
LINUX+C编程GCC+GDB+MAKE工具使用说明.chm LINUX+C编程GCC+GDB+MAKE工具使用说明.chm LINUX+C编程GCC+GDB+MAKE工具使用说明.chm
用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序
编译安装gdb+insight和gdbserver远程调试
omapl138 双核调试通过GDB进行远程调试的步骤,适用于创龙的开发板。