首页 开发编程 正文

php调试怎么快捷 如何调试php程序

让生成一个供举例子的Core文件:$gdbphp-ccore.31656会看到很多的信息:继而默认的产生Coredump.现在让看看Core发生时刻的堆栈,(gdb)bt#0execute(op_array=0xdc9a70)at/home/laruence/package/php-5.2.14/Zend/zend_vm_execut...

本篇文章给大家谈谈php调试怎么快捷,以及如何调试php程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录:

如何调试PHP的Core之获取基本信息

首先, 让生成一个供举例子的Core文件: ?phpfunction recurse($num) { recurse(++$num);} recurse(0); 运行这个PHP文件: $ php test.phpSegmentation fault (core dumped) 这个PHP因为无线递归, 会导致爆栈, 从而造成 segment fault而在PHP的当前工作目录产生Coredump文件(如果你的系统没有产生Coredump文件, 那请查询ulimit的相关设置). 好, 现在, 让删除掉这个test.php, 忘掉上面的代码, 我们现在仅有的是这个Core文件, 任务是, 找出这个Core产生的原因, 以及发生时候的状态. 首先, 让用gdb打开这个core文件: $ gdb php -c core.31656 会看到很多的信息, 首先让我们注意这段: Core was generated by `php test.php'.Program terminated with signal 11, Segmentation fault. 他告诉我们Core发生的原因:”Segmentation fault”. 一般来说, 这种Core是最常见的, 解引用空指针, double free, 以及爆栈等等, 都会触发SIGSEGV, 继而默认的产生Coredump. 现在让看看Core发生时刻的堆栈: #0 execute (op_array=0xdc9a70) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:5353 memset(EX(CVs), 0, sizeof(zval**) * op_array-last_var);(gdb) bt#0 execute (op_array=0xdc9a70) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:53#1 0x00000000006ea263 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fbf400210) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:234#2 0x00000000006e9f61 in execute (op_array=0xdc9a70) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:92#3 0x00000000006ea263 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fbf400440) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:234#4 0x00000000006e9f61 in execute (op_array=0xdc9a70) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:92#5 0x00000000006ea263 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fbf400670) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:234..... 不停的按回车, 可以看到堆栈很深, 不停的是zend_do_fcall_common_helper_SPEC和execute的重复, 那么这基本就能断定是因为产生了无穷大的递归(不能一定说是无穷递归, 比如之前文章中介绍深悉正则(pcre)最大回溯/递归限制). 从而造成爆栈产生的Core. Ok, 那么现在让看看, Core发生在PHP的什么函数中, 在PHP中, 对于FCALL_* Opcode的handler来说, execute_data代表了当前函数调用的一个State, 这个State中包含了信息: (gdb)f 1#1 0x00000000006ea263 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fbf400210) at /home/laruence/package/php-5.2.14/Zend/zend_vm_execute.h:234234 zend_execute(EG(active_op_array) TSRMLS_CC);(gdb) p execute_data-function_state.function-common-function_name$3 = 0x2a95b65a78 "recurse"(gdb) p execute_data-function_state.function-op_array-filename$4 = 0x2a95b632a0 "/home/laruence/test.php"(gdb) p execute_data-function_state.function-op_array-line_start$5 = 2 现在我们得到, 在调用的PHP函数是recurse, 这个函数定义在/home/laruence/test.php的第二行 经过重复验证几个frame, 可以看出, 一直是在重复调用这个PHP函数. 要注意的是, 为了介绍查看执行信息的原理, 我才采用原生的gdb的print来查看, 其实我们还可以使用PHP源代码中提供的.gdbinit(gdb命令编写脚本), 来简单的获取到上面的信息: (gdb) source /home/laruence/package/php-5.2.14/.gdbinit(gdb) zbacktrace[0xbf400210] recurse() /home/laruence/test.php:3[0xbf400440] recurse() /home/laruence/test.php:3[0xbf400670] recurse() /home/laruence/test.php:3[0xbf4008a0] recurse() /home/laruence/test.php:3[0xbf400ad0] recurse() /home/laruence/test.php:3[0xbf400d00] recurse() /home/laruence/test.php:3[0xbf400f30] recurse() /home/laruence/test.php:3[0xbf401160] recurse() /home/laruence/test.php:3..... 关于.gdbinit, 是一段小小的脚本文件, 定义了一些方便我们去调试PHP的Core, 大家也可以用文本编辑器打开, 看看里面定义的一些快捷的命令, 一般来说, 我常用的有: zbacktraceprint_ht**系列zmemcheck OK, 回归正题, 我们现在知道, 问题发生在/home/laruence/test.php的recurse函数的递归调用上了. 现在, 让我们来看看, 在调用这个函数的时候的参数是什么? PHP的参数传递是依靠一个全局Stack来完成的, 也就是EG(argument_stack), EG在非多线程情况下就是executor_globals, 它保持了很多执行状态. 而argument_statck就是参数的传递栈, 保存着对应PHP函数调用层数相当的调用参数. 要注意的是, 这个PHP函数调用堆栈(层数)不和gdb所看到的backtrace简单的一一对应, 所以参数也不能直接和gdb的backtrace对应起来, 需要单独分析: //先看看, 最后一次函数调用的参数数目是多少(gdb) p (int )*(executor_globals-argument_stack-top_element 2)$13 = 1 //再看看, 最后一次函数调用的参数是什么(gdb) p **(zval **)(executor_globals-argument_stack-top_element 3)$2 = {value = {lval = 22445, dval = 1.1089303420906779e-319, str = {val = 0x57ad Address 0x57ad out of bounds, len = 7}, ht = 0x57ad, obj = {handle = 22445, handlers = 0x7}}, refcount = 2, type = 1 '\001', is_ref = 0 '\0'} 好, 我们现在得到, 最后一次调用的参数是一个整数, 数值是22445 到了这一步, 我们就得到了这个Core发生的时刻的PHP层面的相关信息, 接下来, 就可以交给对应的PHP开发工程师来排查, 这个参数下, 可能造成的无穷大递归的原因, 从而修复这个问题..

怎样方便快捷搭建PHP开发环境

直接下载PHP集成环境包(推荐)

phpstudy(推荐,简单实用,环境可切换,操作傻瓜)

XAMPP

Wamp Server

Vertrigo Server

EasyPHP

其他等

逐个安装PHP控件(很麻烦不推荐)

服务器运行程序(apache,nginx,lighttpd ,iis)

数据库(一般PH为  mysql)

FTP工具(服务端用)

   phpStudy安装这里跟你说一下,百度下载安装包以后,傻瓜式直接安装,但是需要注意的是系统的80端口是否已经被占用,这个占用让很多人头疼,其是80端口主要是IIS占用,实用PHP环境时候停止IIS的服务即可。

phpstorm怎么调出terminal快捷键

PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。Phpstrom的一款名为Magicento的插件对快速创建Magento插件十分有用。

常用快捷键

设置快捷键:File Settings IDE Settings Keymap 选择“Eclipse” 然后“Copy”一份 再个性化设置(自己习惯的)快捷键

常用快捷键(keymaps:Default情况下)

Esc键编辑器(从工具窗口)

F1 帮助 千万别按,很卡!

F2(Shift+F2) 下/上高亮错误或警告快速定位

F3 向下查找关键字出现位置

F4 查找变量来源

F5 复制文件/文件夹

F6 移动

F11 切换书签

F12 返回到以前的工具窗口

注意:部分快捷键,必须在没有更改快捷键的情况下才可以使用

查询快捷键

CTRL+N 查找类

CTRL+SHIFT+N 查找文件,打开工程中的文件(类似于eclipse中的ctrl+shift+R),目的是打开当前工程下任意目录的文件

CTRL+SHIFT+ALT+N 查 找类中的方法或变量(JS)

CIRL+B 找变量的来源,跳到变量申明处

CTRL+ALT+B 找所有的子类

CTRL+SHIFT+B 找变量的 类

CTRL+G 定位行,跳转行

CTRL+F 在当前窗口查找文本

CTRL+SHIFT+F 在指定路径查找文本

CTRL+R 当前窗口替换文本

CTRL+SHIFT+R 在指定路径替换文本

ALT+SHIFT+C 查找修改的文件,最近变更历史

CTRL+E 最近打开的文件

F3 查找下一个

SHIFT+F3 查找上一个

F4 查找变量来源

CTRL+ALT+F7 选 中的字符 查找工程出现的地方

ALT+F7 直接查询选中的字符

Ctrl+F7 文件中查询选中字符

自动代码

ALT+回车 导入包,自动修正

CTRL+ALT+L 格式化代码

CTRL+ALT+I 自动缩进

CTRL+ALT+O 优化导入的类和包

CTRL+E 最近更改的文件/代码

CTRL+SHIFT+SPACE 切换窗口

CTRL+SPACE空格 代码自动完成,代码提示,一般与输入法冲突

CTRL+ALT+SPACE 类 名或接口名提示(与系统冲突)

CTRL+P 方法参数提示,显示默认参数

CTRL+J 自动代码提示,自动补全

CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里

ALT+INSERT 生成代码(如GET,SET方法,构造函数等)

复制快捷方式

F5 复制文件/文件夹

CTRL+C 复制

CTRL+V 粘贴

CTRL+X 剪 切,删除行

CTRL+D 复制行

Ctrl + Y 删除行插入符号

CTRL+SHIFT+V 可以复制多个文本

高亮

CTRL+F 选中的文字,高亮显示 上下跳到下一个或者上一个

F2(Shift+F2) 高亮错误或警告快速定位

SHIFT+F2 高亮错误或警告快速定位

CTRL+SHIFT+F7 高亮显示多个关键字.

本地历史VCS/SVN

Alt +反引号(') 快速弹出VCS菜单

Ctrl + K 提交项目VCS

Ctrl + T 更新项目从VCS

Alt + Shift + C 查看最近发生的变化

其他快捷方式

CTRL+Z 倒退(代码后悔)

CTRL+SHIFT+Z 向前

CTRL+H 显 示类结构图

Ctrl +F12 文件结构弹出

Ctrl+Shift+H 方法的层次结构

Ctrl+Alt+H 呼叫层次

CTRL+Q 显示代码注释

CTRL+W 选中代码,连续按会 有其他效果

Ctrl+Shift+W 减少当前选择到以前的状态

CTRL+B 转到声明,快速打开光标处的类或方法说明注释(CTRL + 鼠标单击 也可以)

CTRL+O 魔术方法

CTRL+/ 注释//取消注释

CTRL+SHIFT+/ 注释/*...*/

CTRL+ [] 光标移动到 {}[]开头或结尾位置

CTRL+SHIFT+[] 选中块代码,可以快速复制

ctrl + '-/+': 可以折叠项目中的任何代码块,包括htm中的任意nodetype=3的元素,function,或对象直接量等等。它不是选中折叠,而是自动识别折叠。

ctrl + '.': 折叠选中的代码的代码

Ctrl+Shift+U 选中的字符大小写转换

ctrl+shift+i 快速查看变量或方法定义源

CTRL+ALT+F12 资源管理器打开文件夹,跳转至当前文件在磁盘上的位置

ALT+F1 选择当前文件或菜单中的任何视图工具栏

SHIFT+ALT+INSERT 竖编辑模式

CTRL+ALT ←/→ 返回上次编辑的位置

ALT+ ←/→ 切换代码视图,标签切换

ALT+ ↑/↓ 在方法间快速移动定位

alt + '7': 显示当前的类/函数结构。类似于eclipse中的outline的效果。试验了一下,要比aptana的给力一些,但还是不能完全显示prototype下面的方法名。

SHIFT+F6 重命名,重构 当前区域内变量重命名/重构

不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文件,还可以重命名局部变量。还可以重命名标签名。在sublime text中有个类似的快捷键:ctrl+shift+d。

ctrl+shift+enter(智能完善代码 如 if())

ctrl+shift+up/down(移动行、合并选中行,代码选中区域 向上/下移动)

CTRL+UP/DOWN 光标跳转到编辑器显示区第一行或最后一行下

ESC 光标返回编辑框

SHIFT+ESC 光 标返回编辑框,关闭无用的窗口

CTRL+F4 关闭当前的编辑器或选项卡

Ctrl + Alt + V引入变量

Ctrl + Alt + F 类似引入变量

Ctrl + Alt + C引入常量

Ctrl + Tab 键切换选项卡和工具窗口

Ctrl + Shift + A 查找快捷键

Alt + #[0-9] 打开相应的工具窗口

Ctrl + Shift + F12 切换最大化编辑器

Alt + Shift + F 添加到收藏夹

Alt + Shift + I 检查当前文件与当前的配置文件

Ctrl +反引号(`) 快速切换目前的配色/代码方案/快捷键方案/界面方案

Ctrl + Alt + S 打开设置对话框(与QQ冲突)

运行

Alt + Shift + F10 选择的配置和运行

Alt + Shift + F9 选择配置和调试

Shift + F10 运行

Shift + F9调试

Ctrl + Shift + F10运行范围内配置编辑器

Ctrl + Shift + X运行命令行

调试

F8步过

F7步入

Shift + F7智能进入

Shift + F8步骤

ALT + F9运行到光标

Alt + F8计算表达式

F9恢复程序

Ctrl + F8切换断点

Ctrl + Shift + F8查看断点

导航

Shift + Esc键隐藏活动或最后一个激活的窗口

Ctrl + Shift + F4关闭活动运行/消息/ / ...选项卡

Ctrl + Shift + Backspace键导航到最后编辑的位置

Ctrl + Alt+B 到实施(S)

Ctrl + Shift+I 打开快速定义查询

Ctrl + U 转到super-method/super-class

Alt + Home 组合显示导航栏

书签

Ctrl + F11切换书签助记符

Ctrl +#[0-9]转到编号书签

Shift + F11显示书签

编辑

Ctrl + Q 快速文档查询

ALT + INSERT 生成的代码...器(getter,setter方法,构造函数)

Ctrl + O 覆盖方法

Ctrl + I 实现方法

Alt + Enter 显示意图的行动和快速修复

Shift + Tab 键缩进/取消缩进选中的行

Ctrl + Shift + J 智能线连接(仅适用于HTML和JavaScript)

Ctrl + Enter 智能线分割(HTML和JavaScript)

Shift + Enter 开始新的生产线

Ctrl + Delete 删除字(word)

Ctrl + Backspace删除字开始

Ctrl +小键盘+ / 展开/折叠代码块

Ctrl + Shift +小键盘+展开全部

Ctrl + Shift +数字键盘关闭全部

PHPStrom 中有哪些实用的功能和快捷键

CTRL + j 能够快捷的输入常用的代码片段,类似vim的 snipMate,可以加入自定义代码片段

find every thing phpstorm 支持类名、文件名等的单独搜索,我常用的是直接全部搜索。find every thing 需要自定义快捷键

很精确的函数、类名、变量等的定位,支持命名空间。不得不承认做的的确很好,比vim + ctag好太多了

alt + F7 find usages 功能,可以很方便的找到函数在哪里调用了

shift + F6 重命名 可以很方便的重命名方法和变量名等等。甚至文件的重命名,也会自动修正 include filepath(貌似仅限于简单路径,路径中包含了变量的无法识别。常量没问题)

可以安装 vim插件,同样享受 vim 的快捷操作

ctrl+alt+l 代码格式化

如果你的测试代码要通过 ftp 上传到测试机 Tools-deployment 功能必须配置下,自动上传修改的文件到测试机

不仅仅是 svn还有 git都有很好的支持

可以配置断点调试,参考 本身不常用

支持的php版本很新。当前的 phpstorm7 支持php5.5。接下来的phpstorm8支持Php5.6。

函数中未使用的变量是灰色的。使用未定义的变量会有红色下划线提示。提示变量很好的减少了手误

以上是我常用的,还有很多功能比如对composer phpunit的支持也没用过。这些习惯命令行操作了

phpstorm中的快捷键哪些

1、选择settings,查找keymap,选择eclipse,如果你用java可能会习惯用eclipse,那么在此设置吧,keymap里面有多个选项,phpstorm这点很人性化。

2、最简单和基本的这里就不说了,说下几个非常有用大家又容易忽略的快捷键

Ctrl + Shift + R 查找文件,一个项目如果很大的话,查找文件太重了

Ctrl + Shift + T 查找类,如果文件名不记得,但知道类名叫什么,OK,用这个方法查找吧

Ctrl + H 如果你只是想找某个方法,而某个方法的名称又不记得,或者不知道在哪个文件里面,用Ctrl + H,搜索字符串也可以用正则搜索,非常方便。

Ctrl + E 打开最近关闭的文件

按住Ctrl键不放,点击文件的标题,可以打开文件所在目录。(以后再补充)

Ctrl + Q 回到刚才编辑的地方

Ctrl + Shift + Y 将选中的字母变成相对应的大小写(小写变大写,大写变小写)

Ctrl + O 查看当前类里面的方法

Ctrl + Shift + F 代码格式化方法

Ctrl + Shift + L 查看快捷键或者编辑快捷键

phpstorm怎么设置快捷键设置

1、打开phpstorm8的界面,点击File--settings

2、点击完成后,显示的界面如下图

也可以直接使用快捷键ctrl+alt+s打开如下界面

3、点击Appearance Behavior---keymap 显示的界面

4、也可以在搜索框中输入keymap 直接打开设置界面

5、右边部分显示的情况,在左半边是功能,右半边是快捷键

6、以剪切为例设置一下快捷键

7、可以右键单击CUT 选择最后一项 将快捷键Shift+Delete去掉,去掉以后Cut的快捷键只剩下了ctrl+x

8、除此之外还可以新添加快捷键 右键单击cut 选择第一项Add Keyboard Shortcut

9、点击第一项 设置ctrl+Alt+Backspace为剪切的快捷键

10、确定以后 剪切功能就拥有两个快捷键了,一个是先前的ctrl+x 另一个就是刚设置的ctrl+Alt+Backspace

11、其他的快捷键读者可以根据自己的需要来进行设定

php调试怎么快捷的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何调试php程序、php调试怎么快捷的信息别忘了在本站进行查找喔。

本文转载自互联网,如有侵权,联系删除