在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

Posted noitanym

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码相关的知识,希望对你有一定的参考价值。

在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/01/23/1942382.html


在vim下 安装vdebug参考 http://blog.csdn.net/guyue35/article/details/53968611

在bash下, 输出多行文字到文件中:

  • 使用的是cat命令, 而不是echo命令
  • cat本身是读取文件中的内容 连接输出 standard output, 所以可以重定向到另一文件中, 如果不重定向就 会将 多行文字 直接输出到屏幕.
  • cat本身是 concatenate 连接的意思. 如果不指定输入文件, 就是从标准输入读取内容.
  • cat 输出多行用 两个<< 符号加标识符来界定.

xdebug使用的协议好像有两种, 其中一种就是 dbgp: 即: debug protocol

注意xdebug在php.ini中的配置 节, 可能需要区分大小写, 即可能是 xdebug, 或Xdebug?

由于php已经安装好了, 然后这时再来安装xdebug这个php的扩展模块, 而不是在一开始就将xdebug编译进php的,所以要通过phpize来作为外挂模块安装.

通过下载源码,进行编译安装xdebug, 这样做的目的和结果 就是要得到一个xdebug.so这样的模块, 然后将这个模块拷贝到 /usr/lib/php/modules/目录下.

为什么在下载 的 xdebug.tgz的源码目录中没有 configure文件呢? 这是因为, 首先需要在 解压缩后的 源码目录中, 运行 phpize命令, 这时才会生成configure文件. 然后执行 ./configure --with-xdebug --with-php-config=/etc/php.ini ?

[root@localhost xdebug-2.5.0]# phpize
Can\'t find PHP headers in /usr/include/php
The php-devel package is required for use of this command.
[root@localhost xdebug-2.5.0]#

要首先安装php-devel及其依赖包后,然后 再次执行 phpize, 得到正确的输出:
[root@localhost xdebug-2.5.0]# phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226

这时再次 ls xdebug的源码目录下, 就会看到 configure 文件了.

rc0, rc1, rc2等版本, 是指 release candidate发行候选版本,或就是候选版本, 基本上就是不会有什么改动的 即将要发行的正式版.

参考http://www.aichengxu.com/linux/5121887.htm


在php.ini的最后, 需要增加的 xdebug 节的内容是:

[XDebug]

/* 这里一定要用 zend_extension, 不能只是用extension. 就是要用zend方式加载
[root@localhost html]# ls /usr/lib/php/modules/
bcmath.so    ftp.so       mysql.so       smbclient.so  wddx.so
bz2.so       gd.so        pdo_mysql.so   sockets.so   __ xdebug.so __
*/
zend_extension="D:\\php\\xampp\\php\\ext\\php_xdebug.dll"  或者 是/usr/lib/php/modules/xdebug.so   


xdebug.remote_enable=true     
xdebug.remote_host=127.0.0.1  
xdebug.remote_port=9000       
xdebug.remote_handler=dbgp


;xdebug.profiler_enable = 0  ; 一般不要打开性能监控,会生成很大的缓存文件,几个g到几十g都有
xdebug.remote_port=9000 ; 遠程端口在netbeans裏面默認是9000,也可能不正確,端口不對也調試不了,netbeans工具->选项->常规   选择好web浏览器 工具->选项->php->调试



xdebug.collect_params
类型: integer(整型), 默认值: 0
此参数,默认为0,当在函数轨迹或堆栈轨迹中记录一个函数调用时,控制Xdebug是否应该搜集传递给函数的参数
默认值为0,因为对于大脚本来说,它可能消耗大量的内存而使脚本无法运行。启用该选项是安全的,但是如果脚本中含有大量函数调用或者有大数据结构作 为参数的话,可能会遇到一些问题。 Xdebug 2改进了内存使用,此问题不再存在,因为它不再将这些信息存储在内存中。相反,Xdebug会将这些信息写入硬盘,这意味着你得留意硬盘使用量。
此参数用4个不同的可选值,每个不同的值都会对应显示不同的信息。以下你将看到每个参数值所提供显示的信息,查看章节堆栈轨迹以获取详细介绍。.

xdebug的 remote_host? 配置指的哪个 远程主机?

这里的remote指的是, 远程的开发机.
因为, xdebug是php的模块, 而php和xdebug都是在服务器上的.
所以, xdebug中的设置, 都是指在本机/服务器机器 上的配置. 那么 xdebug中所指的 remote_host机器 / 相对而言的就 不是安装xdebug的本机, 不是服务器了. 而是要 连接到 xdebug (这个服务器)的 远程机器(远程开发机)的机器.
比如: 有一台 centos(或 redhat)的 服务器, 然后在win上, 通过ssh连接到centos, 或者是在 win上 通过ide: eclipse 来连接到centos , 并进行调试的时候,
这时:

  1. 首先就应该在 服务器上安装 xdebug(注意, xdebug总是安装在 服务器上的, 作为php的一个模块存在), 就是说,不能将xdebug安装在这里的win机器上.
  2. 然后, 就是在 服务器上的php.ini中配置xdebug节
  3. 在服务器的xdebug节中, 配置 xdebug.remote_host = "win机器的/运行eclipse的win机器的 ip地址" , 那么其他的配置项就好理解了, 比如: xdebug.remote_port=9000就是指win开发机的xdebug端口号, 那么自然的, xdebug.remote_handler=dbgp就是 指win远程机器 使用什么协议连接到 xdebug.

(上面的remote_port, remote_handler是由你的 开发ide自身指定的.比如是由eclipse 指定的, 比如默认的是9000, dbgp, 那么, 不同的开发机上的不同的ide, 所指定的端口和协议就不同, 不一定是这个了, 你可以在 eclipse中自己指定的.)

由于xdebug采用的是 c/s模式, 总是要由客户端发起的, (要由客户端的浏览器通过http请求发起), 所以说, 总是要/必须要设置 remote远程机器(开发机/调试机器)的配置信息的. 即使是在服务器上/本地机器上进行 调试(服务器本身就是开发机) 这时候, 也必须要设置远程的四个信息: xdebug.remote_enable, remote_host, remote_port, xdebug.remote_handler??????


运行.configure --help最重要的两条配置选项是:

--with-php-config=PATH Path to php-config
--enable-xdebug Enable Xdebug support
注意, 这里的php-config是什么?

  • 是一个配置php的脚本文件, 可执行的
    位置是在 /usr/bin/php-config
    configure: error: Cannot find php-config. Please use --with-php-config=PATH

  • 在 ./configure --help中的说明是: --with-php-config=PATH Path to php-config php-config
    一定要指定到php-config的完整路径和文件名, 即: --with-php-config=/usr/bin/php-config. 查看: which php-config

  • 注意, php-config不是指php的配置文件, 不是指/etc/php.ini

而且, 最开始是没有phpize和php-config 这两个脚本命令的, 要安装好 php-devel包后, 才有phpize和 php-config脚本命令


  1. 其中文档目录有多种形式:包括: --htmldir --docdir, --mandir, --pdfdir等等

  2. xdebug源码目录中, 相关功能模块的文件
    xdebug-tracing.h, xdebug-tracing.c是关于跟踪的功能文件
    xdebug-monitor.h, xdebug-monitor.c
    xdebug-set.h, xdebug-set.c
    xdebug-var.h, xdebug-var.c 是关于xdebug 变量输出的功能文件


bash中, case语句的格式是: 其中语句体 是放在 关键字界定符 in 和 esac之间的.

case "$i" in    // 变量可能要加引号, 也可能不加引号

val1) 
statement...
statement...
;;

val2)
statement...
statement...
;;

*)   // default就是这里的*
statement...
statement...
;;

esac

1 自定义编译安装的时候, 使用的是 libtool工具, 最后将生成的.so模块文件从当前目录的隐藏文件夹中拷贝到目标目录中.
libtool: install: cp ./.libs/xdebug.so /opt/xdebug-2.5.0/modules/xdebug.so
libtool: install: cp ./.libs/xdebug.lai /opt/xdebug-2.5.0/modules/xdebug.la
libtool: finish: PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/sbin" ldconfig -n /opt/xdebug-2.5.0/modules

2 Libraries have been installed in:
/opt/xdebug-2.5.0/modules

3 Build complete.
Don\'t forget to run \'make test\'. // 编译安装完成后, 要运行make test命令.

Installing shared extensions: /usr/lib/php/modules/
会自动的帮你把这个xdebug.so拷贝到 php的共享扩展目录中 你ll /usr/lib/php/modules的时候, 就会看到 这个和 /opt下的同样的 xdebug.so了

NOTE: Please disregard the message (disregard: 漠视, 忽视, 不要管) |
| You should add "extension=xdebug.so" to php.ini |
| that is emitted by the PECL installer. This does not work for |
| Xdebug. |
|

一个常识: 在任何时候, 除非语法要求之外, 不管是写注释还是生效的代码, 都要有单词的意识. 因此, 单词和单词之间都应该有一个空格

php.ini的配置文件中,

  • 使用分号; 进行注释. 分号在这里是一个单词, 因此, 分号和后面的内容之间应该有一个空格
  • 在item=value格式中, item的写法是 小写单词加下划线, 后面的值可能是任何类型的, 比如数字, 字符串, 或者是表示开关的 "逻辑值" On /Off(这里的On和Off 推荐使用 首字母大写的驼峰表示法)

=============================

spawn: [sp2:n], n.子, 卵,菌丝; 产物; 结果 | v. 产卵; 酿成; 造成
php-fpm:php fastcgi processing manager: 它和spawn-fcgi: 都是用来进行php的内存和进程管理的.


php-fpm在php5.3.3之前是作为patch补丁来使用的.
php5.3.3之后, 是已经集成到源码包中的了, 使用 只要在 安装源码的时候, 配置 ./configure -enable-fpm .

php-fpm 跟 php Optimizer类似, 是用来管理 和优化 cgi进程的.

cgi fastcgi . 调用管理关系: php-fpm -> php-cgi -> fastcgi

如何查看php是否开启了php-fpm?

要理解httpd服务器 和 其他脚本程序之间 通信的 原理和方法??

好像是: httpd -> cgi(php-cgi) -> fastcgi?

==================================

在fedora23中, vim中使用xdebug的版本是: xdebug-2.5.0.tgz

在安装xdebug的时候, 不管你自编译安装什么的, 最终的目的都是 为了获得一个 xdebug.so的动态库, 这个动态库要作为php的一个插件使用,即生成获得了xdebug.so后 要拷贝到 /usr/lib/php/modules 目录中, 才能使用这个调试功能

[root@localhost usr]# ls /usr/lib/php/modules
bcmath.so    ftp.so       mysql.so       smbclient.so  wddx.so
bz2.so       gd.so        pdo_mysql.so   sockets.so    xdebug.so

xdebugd的快捷键基本上是"挨着"的, 便于理解和记忆.比如

f2是step in, f3是step over, f4是step out **实际上这个是错误的!** 根据快捷键挨着的原则, f2 才是step over逐过程执行, f3才是 step into 逐语句执行的. 于是, f4就是step out跳出过程了. f5是调试, 而f6是终止调试 产生这个问题 的关键在于 在vim中 按f3 不是step into 却变成了 "全局搜索" . 因为f3默认的就是 系统的全局搜索快捷键 所以, 要去修改这个 快捷键, 比如改为 alt+f3后, 在vim中按f3就可以实现 逐步逐步执行了.

f10是breakpoint的开关
f11是获取所有的变量的值,而f12是获取当前光标所在位置的值

// f1 是调节窗口的大小. 这个显然是不正确的,f1是用来获取系统帮助的.

声明常量是用const关键字, 而不是用constant
对于常量, 不能使用 dollar符号了 因为dollar符号只是对于变量而言的.

当include \'another.inc\'文件时, 两个文件中的变量都可以互相使用, 都是互相可见的. 即当a.php include \'b.php\'文件时, a.php中的变量可以直接在b.php中使用, b.php中的变量也可以在a.php中使用.

当include 一个文件时, 首先是要 把这个文件中的代码 在 当前 include的语句处 "完整的执行"一遍! 然后才能转到这个include语句的下一句.

要在"局部版本"函数内部 使用函数外的变量(全局变量时), 必须显式的声明 global \\(global_var; 或者使用 php 语言 本身 自带的全局数组\\)GLOBALS..


几个单词的意思

tense: n. 时态, 动词/形容词: 紧张的, 不能松弛的
plural: [plur2l]: 复数/复数的
form: n. 形式 , 比如: plural form; singular form. 动词: 形成. a past participle is a word formed from a verb ending in -ed , -en etc.
\'participle :(注意, 重音在最前面...) 跟 principle容易 mixed up 混淆, 虽然都是以 -ciple结尾的, 但是一个是part(有包含, 部分的意思), prin- 规则...
所以, par\'ticipant: 参与者, 参与的...
现在分词: Present Participle, past participle

simple: 除了 "意思简单的, 容易理解的" 之外, 还有: "单纯的, 头脑简单的 , 简约的"
所以, 一般现在时, 也叫 "简单现在时" 现在分词, 叶叫做: 简单现在分词 Simple Present:
present和repre\'sent这两个词之间实际上没有什么关系, 只是在书写上有些混淆. 但是 represent 的重音是在 最后的 sent上, 前面的 repre是次重音.

gaze at: 盯着看, 对...向往
admiring: 羡慕的, 仰慕的
admiringly...


step over和 step in 的区别?

  1. 两者都是一步一步的执行
  2. 区别是在遇到 函数的时候, step over是将函数作为一条语句, 不会进入函数内部, 而step in 会进入到函数内部去执行.
  3. 所以两者的区别 只是在 针对 函数的 执行上, 如果是step over 则不会进入函数内部, 而step in 会进入函数内部..

以上是关于在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码的主要内容,如果未能解决你的问题,请参考以下文章

Vim使用XDebug支持Php调试

PHP调试跟踪之XDebug使用总结

php调试工具xdebug的使用windows

window下安装php调试工具xdebug

php安装xdebug调试的问题。。

markdown [安装Xdebug]在Valet上为PHP 7.2安装Xdebug #valet #php #test #xdebug