使用xdebug进行远程调试

阅读更多
使用xdebug进行远程调试。

这是我的原创文章,转载请注明出处

xdebug原理就不说了,网上很多,分本地调试,远程调试。
本地调试很简单,phpstorm号称零配置,也很简单。因为太简单, 本文不讨论本地调试

xdebug远程调试比较复杂。

花了好几天时间踩坑,终于搞清楚调试方法。
本文档既适用于docker,也适用于普通的远程主机。因为docker最麻烦。

现实的情况是,我在本机的docker-toolbox里部署的php,nginx,宿主机是win7,开发工具phpstorm。

首先,给php安装好xdebug。配置大概如下:
zend_extension=xdebug.so
xdebug.remote_enable = On
xdebug.remote_handler = dbgp   
xdebug.remote_host = 10.0.0.2
xdebug.remote_port = 9002
xdebug.idekey = PHPSTORM


dbgp是固定写法。
10.0.0.2是容器访问宿主机的ip,在win7 的cmd,用ipconfig可以看到当前机器的ip。
但最佳方法是写phpinfo(),然后观察宿主机在docker里的ip地址。
9002是 phpstorm这个应用程序的监听端口。
还有,xdebug比较特别,不能使用extension = 。。。 ,而必须使用zend_extension= ...

给nginx配置server_name
这是血泪教训,好几天就因为这个没有配,还是大量google得知的。
server {
    listen 80;
    root /var/www/taoke;
    server_name www.t1.com;
    index index.php ;
    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }
	location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    } 
}


重点就那一句话 server_name ...

docker共享目录设置
目录总共有三种,
win7下的程序目录。
docker容器外的目录。
docker容器内目录。
比如的我项目:
win7下:
D:\lenovo_d\docker_study\my_dockerfile\wwwroot\taoke

然后我在虚拟机做了共享目录
在docker环境的根目录下有docker_study目录,映射 了win7的同名目录,
于是为
/docker_study/my_dockerfile/wwwroot/taoke

然后,容器内,又做了映射,容器内只能和容器外互相映射。
/var/www/taoke
也就是nginx的配置文件。

但是做debug,只能有两种目录,我想了个办法。
把容器外的目录添加符号链接,搞定。
在容器外,即docker环境。
ln -s /docker_study/my_dockerfile/wwwroot /var/www

现在,只要说到docker的目录,只有一个,即/var/www/taoke,无论容器内外。


win7设置hosts
C:\Windows\System32\drivers\etc\hosts
添加:
127.0.0.1 www.t1.com

win7浏览器添加附加组件:
如果用火狐,叫做Xdebug helper
如果用chrome,也叫这个名字。
安装好之后,需要右击这个图标,选择“选项”,然后设置IDE KEY为PHPSTORM
以后,想调试时,就设置此图标为绿色 ,即debug状态,
不想调试时,设置此图标为灰色,即disable状态。

phpstorm各种配置 - Debug
file- settings - languages & frameworks - PHP - Debug
设置端口为9002,注意必须和php.ini里的xdebug 的那个xdebug.remote_port 保持一致。
端口周围的三个勾一起打上。

至于Zend Debugger选项不去管它。
还有,改变此端口,需要重启phpstorm。

Debug选项在settings中有3个子项,都可以不管。

phpstorm各种配置 - Deployment 即部署
file- settings - Build,Execution,Deployment - Deployment

点击加号添加一个远程目录映射。
1、Connection
打勾仅对于此项目可见。
type:sftp
host:192.168.99.100
port:22
username:docker
认证方式:password
password:tcuser
勾选保存密码
root path:/var/www/taoke
web server url: http://192.168.99.100
下面的高级选项忽略。

2、Mappings
localpath:D:\lenovo_d\docker_study\my_dockerfile\wwwroot\taoke
deployment path: /
web path:/

3、Explude Paths
自己看情况,可以不设置

正常情况下,设置完之后,会自动列出该目录下的文件。
打开此视窗,在菜单view - tool windows - Remote host

phpstorm各种配置 - servers
file- settings - languages & frameworks - PHP - Servers
添加一个,点击加号。
Name,随意,我填t1,打勾shared。
Host:超级重要,
我填www.t1.com
这既是浏览器访问的网址的主机,又是 nginx里配置的 server_name,然后填写到这里,三方统一。

port:80
选xdebug
勾选use path mappings
左边是:D:\lenovo_d\docker_study\my_dockerfile\wwwroot\taoke
右边是 /var/www/taoke
点击确定。

给程序添加断点
菜单view - toolbar,确保勾上。
确保打电话的绿色小图标没有被禁止,自己点点看电话小图标就知道有两种状态了,启用,禁用。

例如:我的根目录下有一个p123.php
我在phpstorm里打开这个文件,在任意行加断点,关闭这个文件。
此时,打开浏览器,确保附加组件xdebug helper的图标点亮。
输入, www.t1.com/p123.php,发现浏览器页面没有立即返回,似乎在等待什么。
此时,进入phpstorm,发现p123.php这个文件被自动打开,且我的断点行,自动高亮,且下面出现调试窗口,列出了当前php环境的所有变量的值,此时,可以点击几个debug按钮,让程序步进。

完全搞定了!!
条件:phpstorm的程序有断点设置,phpstorm有监听xdebug的请求,小电话图标点亮。
浏览器有使用插件,且设置为debug状态。

如果不想调试,最简单的办法是点击浏览器插件小图标,设置为disable状态,就可以了。极其方便!

最后补充一点,生产服务器不可以安装xdebug,否则导致量资源消耗,且不安全。

你可能感兴趣的:(xdebug,远程调试)