开发环境使用 docker,如何正确的调试

2017-11-06 22:55:54 +08:00
 conn4575

主要开发语言是 php 和 python,使用 docker 切换版本确实很方便,但是调试就蛋疼了,现在全靠 print 调试。。

4231 次点击
所在节点    程序员
6 条回复
fzinfz
2017-11-06 23:00:27 +08:00
X11 Forwarding
pubby
2017-11-06 23:03:13 +08:00
phpstorm 远程调试啊
zeq
2017-11-07 00:41:12 +08:00
最基本的 volumes 要设置好,然后:

ipython

%pdb
%debug
dangyuluo
2017-11-07 00:50:38 +08:00
我已经放弃调试了
gouchaoer
2017-11-07 11:17:05 +08:00
php 在 docker 里面可以通过 xdebug 连上宿主的 IDE 调试啊,做法类似这样:
```
@unlink("/etc/php.d/xdebug.ini");
$my_xdebug = "/etc/php.d/my_xdebug.ini";
if(!file_exists($my_xdebug))
{
$HOST_IP=null;
exec("ip route", $o, $r);
echo implode(PHP_EOL, $o) . PHP_EOL;
foreach ($o as $line)
{
$res = preg_match("/default.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/", $line, $matches);
if($res)
$HOST_IP=$matches[1];
}
//$HOST_IP is not always correct. If wrong you should manually find your host's ip in container to use xdebug.
if(empty($HOST_IP))
{
die("failed to exec 'ip route' to get HOST's ip");
}
$xdebug_ini=<<<EOL
; Enable xdebug extension module
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "{$HOST_IP}"
EOL;
```
gouchaoer
2017-11-07 11:19:15 +08:00
简单的说就是在 docker 容器中找到 host 的 ip,然后在 xdebug 中设置连 host 的 ip 就 ok 了。。。。如果你 docker 泡在 win7/win10 里面,因为本身 hyper 虚拟机还有一个路由,所以这个不准,你需要手动查看 hyper 虚拟机路由中 host 的 ip,然后设置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/404112

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX