【发布时间】:2010-09-29 15:26:53
【问题描述】:
我看过这些答案:debugging php on mac?
但我希望有更好/更新的解决方案。我是一名系统级开发人员 (C/C++/x86),但对 Web/脚本空间完全陌生。我觉得我最好设置一个可靠的调试环境 - 这通常是我学习的好方法。
任何关于在 Mac (10.6) 上进行良好 php 调试设置的建议/指针将不胜感激。
谢谢, 马特
【问题讨论】:
我看过这些答案:debugging php on mac?
但我希望有更好/更新的解决方案。我是一名系统级开发人员 (C/C++/x86),但对 Web/脚本空间完全陌生。我觉得我最好设置一个可靠的调试环境 - 这通常是我学习的好方法。
任何关于在 Mac (10.6) 上进行良好 php 调试设置的建议/指针将不胜感激。
谢谢, 马特
【问题讨论】:
我自己是 Mac 用户,由于我进行了一些繁重的 PHP 开发,因此我需要为此进行精心设置。
首先,Snow Leopard 中安装的标准 PHP 和 Apache 还不错,但升级或添加扩展是一项艰巨的任务。为了能够完全控制环境,我决定使用MacPorts 安装整个 AMP 堆栈。不要担心覆盖现有文件,因为所有内容都将安装在不同的位置。只需确保在启动新安装的 Apache 之前禁用现有的 Apache。有很多关于如何完成这项工作的教程。
我选择的 IDE 是 Komodo IDE。此 IDE 开箱即用,使用预配置的 xdebug 设置进行集成调试。出于兼容性原因(PHP 5.3+),我最终编译并使用了最新的 xdebug 版本而不是库存版本。许多开发人员使用前面提到的 Eclipse + PDT,它提供了一个类似的 IDE,尽管需要做更多的工作才能正确配置它。
对于远程调试,我已经在 apache 中配置了 PHP 模块来加载 xdebug 并连接到我正在运行的 IDE。可以在here 找到更多信息。对于复杂的 Web 应用程序,最好打开浏览器,导航到正确的网页并激活调试以进入该页面的第一行代码。
对于性能测试和调整,我使用 xdebug 的profiling feature。启用后,xdebug 会将 callgrind 文件写入特定目录。我使用MacCallGrind 直观地分析分析器文件。如果您启用了 MacPorts(如第一个建议中所述),则可以安装一个名为 KCacheGrind 的免费替代方案。
我使用这个环境来开发相当复杂的大型多宿主项目,包括使用分叉和 IPC 结构和扩展(如 memcache)的命令行(守护进程)PHP 应用程序。我对这个设置对我的工作方式非常满意。
【讨论】:
自制 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
PHP + Xdebug
1) 安装php并调试
brew install php70
brew install php70-xdebug
在 PhpStorm - 检查首选项 => 语言和框架 => PHP PHP语言等级:7 解释器:PHP 7.0.8 + XDebug(或从 [...] 中选择)
检查调试配置: 首选项 => 语言和框架 => PHP => 调试 => Xdebug 部分 应选中所有复选框并将调试端口设置为:9001
2) 在您的应用目录中运行服务器:
php -S localhost:8080
3) 将 localhost:8080 添加到 PhpStorm 首选项 => 语言和框架 => PHP => 服务器: 名称:本地主机:8080 主机:本地主机 端口:8080 调试器:Xdebug
4) 更新 php.ini: Php => 解释器 => […] => 配置文件 - 在编辑器中打开 添加此部分:(通过cli检查zend_extention路径)
[Xdebug]
zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9001 (same as in Debug preferences)
5) 添加调试配置: 运行 => 编辑配置 => 添加 - PHP Web 应用程序
6) 点击开始监听 PHP 调试连接 7) 设置断点 7) 点击调试(绿虫)
【讨论】:
我也对更好的解决方案感兴趣,但我怀疑是否存在。
使用 NetBeans、Eclipse 或 MacGDBp 等前端的 xdebug 可能是下注的地方。
【讨论】: