在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代码的更多相关文章

  1. 在VM中安装Android4.4连接小米手环 之 在VM中安装Android4.4

    今天刚买了个小米手环,系统须要4.4及以上,但自己手机系统版本号不匹配.故打算在VM中安装Android4.4连接小米手环. 这一节先介绍在VM中安装Android4.4(怎么安装VM就不介绍了) 1 ...

  2. pycharm中安装可以贴图片的Markdown插件

    方法一:(测试成功) 先安装官方推荐的Markdown support插件,再安装Paste images into MarkDown 如果Paste images into MarkDown插件在线 ...

  3. Eclipse中安装可以新建html文件的插件(Eclipse HTML Editor)

    最近在eclipse中开发android项目,用到了jquery mobile框架,则会涉及到新建html文件,发现eclipse不自带新建html文件的插件,必须得新建一个其他形式的文件,譬如xml ...

  4. 在eclipse中maven构建Web项目,tomcat插件在maven中的运用

    1.选中maven,构建maven  web 2.项目构建好之后发现一个错误如图,是因为没有servlet的API,我们需要在pom.xml 中对servlet的API进行依赖 pom.xml如下即可 ...

  5. 【技术博客】使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试

    目录 使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试 简介 PhpStorm中的远程开发 1. 配置服务器 2. 配置路径对应 3. 配置同步 4. 进行代码同步 5. 优点 ...

  6. 在Linux中安装JDK和IDEA

    前言 寒假安装虚拟机的时候我就没有安装好,到学校之后,因为时间紧加上更习惯Windows的操作习惯,我只在Windows上安装了JDK和IDEA,但是随着学习的深入,我发现用虚拟机写命令行.新建jav ...

  7. 怎样把windows中安装的程序列出来?

    症状/问题我怎样把windows中安装的程序信息输出到一个文本文件中?解决方法使用 windows 操作系统中的命令:wmic就可以做到.下面的命令就可以把系统中安装的程序都输出到文件ProgramL ...

  8. <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  9. (三十二)虚拟机linux系统中安装firefox浏览器

    这几天,第二轮项目迭代进入了尾声,同时也接到了上司领导交代下来的新任务,那就是要我们学习linux系统基础的知识,包括常用命令和web应用的部署问题,于是乎安装了虚拟机和linux操作系统. 我安装的 ...

随机推荐

  1. CSS border-radius边框圆角

    在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置. 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 ...

  2. python3 TypeError: a bytes-like object is required, not 'str'

    在学习<Python web开发学习实录>时, 例11-1: # !/usr/bin/env python # coding=utf-8 import socket sock = sock ...

  3. hdu4778 状态压缩

    #include <iostream> #include <algorithm> #include <cstdio> #include <vector> ...

  4. CSS选择符-----元素选择符

       通配选择符(*)           选定所有对象 通配选择符(Universal Selector) 通常不建议使用通配选择符,因为它会遍历并命中文档中所有的元素,出于性能考虑,需酌情使用 & ...

  5. SQL提交数据三种类型

    在数据库的插入.删除和修改操作时,只有当事务在提交到数据库时才算完成. SQL语句提交数据有三种类型:显式提交.隐式提交及自动提交. [1]显式提交 显式提交.即用COMMIT命令直接完成的提交方式. ...

  6. 仿照admin实现一个自定义的增删改查的组件

    1.首先,创建三个项目,app01,app02,stark,在settings里边记得配置.然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配 ...

  7. Java8 异步编排类CompletableFuture

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. https://www.cnblogs.com/shijiaqi1066/p/8758206 ...

  8. 大数据和hadoop有什么关系?

    本文资料来自百度文库相关文档 Hadoop,Spark和Storm是目前最重要的三大分布式计算系统,Hadoop常用于离线的复杂的大数据处理,Spark常用于离线的快速的大数据处理,而Storm常用于 ...

  9. flask 在模板中渲染错误消息

    在模板中渲染错误消息 如果form.valicate_on_submit()返回False,说明验证没有通过,对于没有验证通过的字段,WTForms会把错误信息添加到表单类的errors属性中,这是一 ...

  10. 复习loadRunner参数化

    参数化: 为什么要用参数化? 如果是单一数据,那么会纯测试缓存. 如果是参数化,基本上大部分数据不会被缓存命中. 极端情况:所有的数据都不会被缓存命中,或者少量命中. 在loadrunner中,所有的 ...