• 在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:phpxamppphpextphp_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 会进入函数内部..

  • 相关阅读:
    DevExpress中设置PanelControl背景的方法
    ArcEngine选中面要素样式修改
    DEV winform treelist设置背景图像
    React-Native运行知乎日报遇到的问题
    winform程序自动升级
    jquery图片轮播效果(unslider)
    Orchard搜索与索引
    网络版会飞的小鸟
    jQuery event的复制粘贴的坑
    记一次有趣的互联网事件及console.log~
  • 原文地址:https://www.cnblogs.com/bkylee/p/8409097.html
Copyright © 2020-2023  润新知