gdb调试php

gdb与lldb对比
http://lldb.llvm.org/lldb-gdb.html

利用gdb调试php拓展

今天总算是调试php拓展成功了,经历的过程就是思考然后google,思考然后google;自学的路都是靠自己坚持下来的,没人问的时候还是得要看自己的坚持,如果自己不坚持下来,永远都学不会,如果坚持下来了,也许一周,也许一个月后,你终究是会了的。
  1. 编译可以debug的php
sudo ./configure --prefix=/opt/php-debug --enable-debug
  1. 开发一个最简单的拓展,我自己写了一个say_hello函数,编译拓展
在config.m4的最下面添加如下代码 ,开启拓展可以调试
if test -z "$PHP_DEBUG"; then   
    AC_ARG_ENABLE(debug,  
    [ --enable-debug      compile with debugging symbols],[  
    PHP_DEBUG=$enableval  
    ],[ PHP_DEBUG=no  
    ])  
fi
然后编译
sudo opt/php-debug/bin/phpize
sudo ./configure --with-php-config=/opt/php-debug/bin/php-config --enable-debug

3.如此我们编译好了,我们在配置文件中添加一下这个配置一下这个拓展,接下来就是gdb来调试了

#进入gdb
sudo gdb /opt/php-debug/bin/php
#在拓展函数处打断点
#记住加上zif
break zif_say_hello
run test.php
#这样就ok了,我们就可以停在拓展的函数上了
#这些就可以让你看到一个很炫的界面了
sudo gdb /usr/local/phpdebug/bin/php
run filepath
info break
break main
focus

这里写图片描述


输入命令layout或者focus可以边看代码边执行,真是爽爆了
s 进入函数
return ,finish 跳出函数
加断点 :   break filename:行号    break filename:函数名
查看断点信息 :  info break
删除断点信息 : delete id或者直接delete删除所有的断点

下面是加断点的语法
break <function>    在进入指定函数时停住
break <linenum>    在指定行号停住。
break +/-offset    在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum    在源文件filename的linenum行处停住。
break ... if <condition>    ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。
/*下面断点的操作*/
delete    删除所有断点
delete breakpoint [n]    删除某个断点
disable breakpoint [n]    禁用某个断点
enable breakpoint [n]    使能某个断点


/*通过设置观察点来监控某个变量的变化*/

观察点(WatchPoint):

在变量读、写或变化时中断,这类方式常用来定位bug。

watch <expr>    变量发生变化时中断
rwatch <expr>    变量被读时中断
awatch <expr>     变量值被读或被写时中断
info source查看gdb处于哪个文件

断点必须执行代码的地方才有效,如php内核中,找到main函数,加上断点调试才有效果
info locals 查看运行了的变量

next 单步执行,碰到函数会绕过
set aa = 11 设置变量aa的值是11
watch i  监控I的值得改变
rwatch i如何一个变量被读,则立马停止程序,把调试信息打印在屏幕上
finish 继续执行,直到当前函数返回
info name 查看name的信息
xbreak 在当前函数退出点上设置一个断点
whatis 显示变量值和类型
shell 不离开gdb就可以执行shell命令
一般的小程序直接break main
list filename:2,20  显示文件220行的代码
list functionname 显示函数附近的代码
php在编译的时候指定了--with-config-file --with-config-scan-dir之后编译拓展不用加extension_dir配置了,哈哈

CMake相关知识

//表示要编译的源文件,所有的源文件都要罗列到此处。set 设置变量,变量名SOURCE_FILES自定义
SET(SOURCE_FILES .....)

//设置搜索头文件的目录
INCLUDE_DIRECTORY()
//设置链接的库文件目录
LINK_DIRECTORIES()

//cmake 也是标准的三部,和./configure && make &&make install
 1. build
 2. cmake ..
 3. make
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值