在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 , 并进行调试的时候,
这时:
- 首先就应该在 服务器上安装 xdebug(注意, xdebug总是安装在 服务器上的, 作为php的一个模块存在), 就是说,不能将xdebug安装在这里的win机器上.
- 然后, 就是在 服务器上的php.ini中配置xdebug节
- 在服务器的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脚本命令
-
其中文档目录有多种形式:包括: --htmldir --docdir, --mandir, --pdfdir等等
-
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 的区别?
- 两者都是一步一步的执行
- 区别是在遇到 函数的时候, step over是将函数作为一条语句, 不会进入函数内部, 而step in 会进入到函数内部去执行.
- 所以两者的区别 只是在 针对 函数的 执行上, 如果是step over 则不会进入函数内部, 而step in 会进入函数内部..