这里说的是直接给出docker环境的题目的情况,老是需要重新配调试环境是非常费时间和心态的一件事,但是很多时候题目和调试环境联系过于密切因而不得不在原先基础上整一个调试环境出来。这里简单说下一些环境的快速配法。

另外,推荐整一个能科学上网的透明路由,免得老是要换源改原本的docker代码(折磨.jpg)。

下文中出现的172.17.0.1docker0网卡中的IP地址。

PHP

这里安装Xdebug作为调试工具。

进入到带着php的docker环境里面,使用命令pecl install xdebug安装xdebug插件,一般会装上xdebug-3.1.2

然后你可以选择直接在php.ini文件中进行相关的修改,但是不太方便(有些比较特殊的环境不带php.ini而且一旦带了没改好就没法成功运行),我个人的建议是按照下面这样的方法改:

先来看看一些相关扩展文件的存放位置,

1
2
3
4
5
6
7
8
9
10
11
12
root@c81fe68f5baf:/usr/local/etc/php/conf.d# php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File: (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed: /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini

root@c81fe68f5baf:/usr/local/etc/php/conf.d# cat docker-php-ext-sodium.ini
extension=sodium
root@c81fe68f5baf:/usr/local/etc/php/conf.d# find / -name xdebug.so 2>/dev/null
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
root@c81fe68f5baf:/usr/local/etc/php/conf.d# ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
opcache.so sodium.so xdebug.so

于是乎新建一个/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini文件,其中内容如下:

1
2
3
4
5
6
7
8
9
10
11
extension = xdebug
xdebug.mode = debug
xdebug.log = /home/xdebug.log
xdebug.log_level = 7
xdebug.idekey = "PHPSTORM"
xdebug.remote_handler = "dbgp"
xdebug.remote_connect_back = 0
xdebug.client_host = 172.17.0.1
xdebug.start_with_request = yes
xdebug.client_port = 9001
xdebug.remote_log = /tmp/remote_xdebug.log

这时如果我们用php -m查看相关的模块就会发现xdebug已经在*[Zend Modules]*里面了。

接着配置Phpstorm里面的内容,打开File->Settings...,按如下截图填写:

1

2

3

这些就不细说了,自己调整即可。

最后记得使用docker-compose restart或其他命令重启docker服务,不要把容器关掉,这样就白忙活了。

这一系列步骤完成后,就可以打开Phpstorm右上角的小电话愉快地进行调试了。

NodeJS

这个也相对比较简单。

只需要稍微调整下dockerfile或者docker-compose.yml的内容,把原本其中的node app.js改成node --inspect=0.0.0.0:9229 app.js或者node --inspect-brk=0.0.0.0:9229 app.js,我一般使用前者,因为后者会先给断一下,对我来说没必要。

然后稍微配置下Phpstorm,其中的172.20.0.2就是运行着node的docker容器的ip地址。其他也就如图所示了。

4

这里的Remote URLs of local files (optional)基本上是不用指定的。

最后点击图上箭头所指的小甲虫运行即可。

打断点,访问相关的网页就应该能直接看到一些调试信息了。

未完待续

其他环境有必要我会再丰富这篇文章的……